C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[9]: コマンドプロンプトを表示しないEXEの作り方


(過去ログ 23 を表示中)

[トピック内 10 記事 (1 - 10 表示)]  << 0 >>

■10232 / inTopicNo.1)  コマンドプロンプトを表示しないEXEの作り方
  
□投稿者/ サイトー (1回)-(2007/11/14(Wed) 12:06:39)

分類:[C#] 

開発環境:
・WindowsXP
・VisualStudio2005 C#

はじめまして。サイトーと申します。

何も(コマンドプロンプトも)表示せずに、ただ処理を実行するexeファイルを作成したく思っています。
(例えば、実行するたびに同じフォルダにテキストファイルを作成する、というようなものです)
どのようにしたら、作成できますか?

僕が行った手順、結果は
・C#のプロジェクトを作成する際、一番用途に合っていそうだった「コンソール アプリケーション」を選択。
・実装を行ってビルドし、exeファイルを実行。
 →真っ黒なコマンドプロンプト画面が表示され、処理終了後に消えました。

このコマンドプロンプト画面を表示せずに、処理を行うexeファイルが作成したいです。
初歩的過ぎる質問かもしれませんが、よろしくお願いします。
引用返信 編集キー/
■10236 / inTopicNo.2)  Re[1]: コマンドプロンプトを表示しないEXEの作り方
□投稿者/ カンタービレ (45回)-(2007/11/14(Wed) 13:03:27)
No10232 (サイトー さん) に返信
> 何も(コマンドプロンプトも)表示せずに、ただ処理を実行するexeファイルを作成したく思っています。
> (例えば、実行するたびに同じフォルダにテキストファイルを作成する、というようなものです)
> どのようにしたら、作成できますか?
>
簡単なのは画面を持たないWindowsアプリケーションにしたらどうかと。
コンソールアプリケーションで作ったクラスがあるなら、それをスタートアップクラスにして
実行すれば何も表示されないと思いマス。
コンソールアプリケーションでも起動側が抑止してあげればお望みの結果にもなりマスけど。

引用返信 編集キー/
■10239 / inTopicNo.3)  Re[2]: コマンドプロンプトを表示しないEXEの作り方
□投稿者/ サイトー (2回)-(2007/11/14(Wed) 14:20:20)
No10236 (カンタービレ さん) に返信

回答、ありがとうございます!

> 簡単なのは画面を持たないWindowsアプリケーションにしたらどうかと。
> コンソールアプリケーションで作ったクラスがあるなら、それをスタートアップクラスにして
> 実行すれば何も表示されないと思いマス。

次のようにしてみました。
1.Windowsアプリケーションを作成
2.元々コンソールアプリケーションでMainメソッド内にあった処理を、
 新たに作成したクラス「Class1.cs」内のstaticメソッド「run」内に移動。
3.Mainメソッド内を以下のように修正。
    [STAThread]
    static void Main()
    {
        Class1.run();
    }

これでウインドウが表示されずに動くようになりました。
が、「スタートアップクラス」という言葉の意味がわかっていません。
上記のコードで、カンタービレさんの回答を満たしていますか?

また、ウィザードで「Windowsアプリケーション」「コンソールアプリケーション」を選んだ場合の、
出来上がるソースの違いがよくわかりません。(少なくとも、usingの内容が違いますが、それ以外がわかりません)
おしえていただけませんか?


> コンソールアプリケーションでも起動側が抑止してあげればお望みの結果にもなりマスけど。

起動側というのは、コンソールアプリケーションのプログラム側のことではなく、
それを起動する側のプログラミング(別に作成した起動用プログラム?)ということでしょうか?

引用返信 編集キー/
■10242 / inTopicNo.4)  Re[3]: コマンドプロンプトを表示しないEXEの作り方
□投稿者/ 渋木宏明(ひどり) (549回)-(2007/11/14(Wed) 15:59:25)
渋木宏明(ひどり) さんの Web サイト
>>コンソールアプリケーションでも起動側が抑止してあげればお望みの結果にもなりマスけど。
>
> 起動側というのは、コンソールアプリケーションのプログラム側のことではなく、
> それを起動する側のプログラミング(別に作成した起動用プログラム?)ということでしょうか?

そういうことです。

特に何も条件や制約がないなら、「ウィンドウを持たない GUI プログラム」を作るよりも、そっちの方が普通の対応です。

引用返信 編集キー/
■10244 / inTopicNo.5)  Re[4]: コマンドプロンプトを表示しないEXEの作り方
□投稿者/ カンタービレ (46回)-(2007/11/14(Wed) 17:16:19)
> が、「スタートアップクラス」という言葉の意味がわかっていません。
> 上記のコードで、カンタービレさんの回答を満たしていますか?

別の書き方もあるでしょうけど満たしてると思いマス。
スタートアップクラスという書き方がよくなかったかしら。
プロジェクトのプロパティにあるアプリケーションタブの「スタートアップオブジェクト」のことデス。
ここで指定されているものが、実際にビルドで作成されたアセンブリのエントリーポイントになりマス。

> また、ウィザードで「Windowsアプリケーション」「コンソールアプリケーション」を選んだ場合の、
> 出来上がるソースの違いがよくわかりません。(少なくとも、usingの内容が違いますが、それ以外がわかりません)
> おしえていただけませんか?

ウィザードでそれぞれの作る違いって・・・?デフォルト作成されるクラスも数も見た目全然違うような・・?
ゴメンナサイ、質問の意味がよくわかりません。。

コンソールアプリのメインクラスにはstatic void Main()メソッド(デフォルトのエントリポイント)が
ありマスよね?フォームクラスにはないデス。
フォームクラスはpartial class(部分クラス)になっていて、フォームクラス.designer.csというのが
別ファイルで出来ていマス。コンソールで作成したクラスにはありません。
フォームクラスはしかもSystem.Windows.Forms.Formクラスを継承していマス。コンソールはしてません。
こういった違いの意味が分からないってことかな??
それだったら、もう少しそこは自分で調べてみましょうよ^^;
引用返信 編集キー/
■10247 / inTopicNo.6)  Re[5]: コマンドプロンプトを表示しないEXEの作り方
□投稿者/ サイトー (3回)-(2007/11/14(Wed) 18:09:24)
No10244 (カンタービレ さん) に返信

> 別の書き方もあるでしょうけど満たしてると思いマス。
> スタートアップクラスという書き方がよくなかったかしら。
> プロジェクトのプロパティにあるアプリケーションタブの「スタートアップオブジェクト」のことデス。
> ここで指定されているものが、実際にビルドで作成されたアセンブリのエントリーポイントになりマス。

エントリーポイントを指定する方法があるんですね。
そのこと自体、わかっていませんでした。勉強不足ですね。
教えてくださって、ありがとうございます。

> ウィザードでそれぞれの作る違いって・・・?デフォルト作成されるクラスも数も見た目全然違うような・・?
> ゴメンナサイ、質問の意味がよくわかりません。。
>
> コンソールアプリのメインクラスにはstatic void Main()メソッド(デフォルトのエントリポイント)が
> ありマスよね?フォームクラスにはないデス。
> フォームクラスはpartial class(部分クラス)になっていて、フォームクラス.designer.csというのが
> 別ファイルで出来ていマス。コンソールで作成したクラスにはありません。
> フォームクラスはしかもSystem.Windows.Forms.Formクラスを継承していマス。コンソールはしてません。
> こういった違いの意味が分からないってことかな??
> それだったら、もう少しそこは自分で調べてみましょうよ^^;

僕の環境(VisualStudio2005)で作成した「Windowsアプリケーション」「コンソールアプリケーション」とも、
デフォルトでprogram.csが作成され、その中に
static void Main()メソッドがあります。
確かにMain()メソッドのデフォルトの内容は違うのですが、
Main()メソッドの内容を同じものにして実行すると、
「コンソールアプリケーション」の方はコマンドプロンプトが表示、
「Windowsアプリケーション」の方はそれが表示されない・・・と違いがありますよね。
Main()メソッドの内容が同じものなのに、この違いがでてくるというのは、
一体何が要因なのだろう?と思って質問しました。
言葉足らずで失礼しました。

でも、どうしてなのでしょう??
(もう少し自分で調べてみますね^^;)
引用返信 編集キー/
■10249 / inTopicNo.7)  Re[6]: コマンドプロンプトを表示しないEXEの作り方
□投稿者/ カンタービレ (47回)-(2007/11/14(Wed) 18:45:51)
No10247 (サイトー さん) に返信
> 「コンソールアプリケーション」の方はコマンドプロンプトが表示、
> 「Windowsアプリケーション」の方はそれが表示されない・・・と違いがありますよね。
> Main()メソッドの内容が同じものなのに、この違いがでてくるというのは、
> 一体何が要因なのだろう?と思って質問しました。
> 言葉足らずで失礼しました。
>
> でも、どうしてなのでしょう??
> (もう少し自分で調べてみますね^^;)

アセンブリタイプによる挙動の違いを言ってマスでしょうか?
少なくともコンソールアプリケーションのときやクラスライブラリ、ウィンドウアプリケーションの時で
それぞれ○○.csprojの<PropertyGroup>内にある<OutputType>の内容が違いマス。
タイプが違うと、同じEXEでも簡単に言うとタイプの違うEXEが作られるんデス。

理由として納得するかどうか分かりませんが
ソースのメソッド構成は一緒でもそれを動かしてくれるベース部分が全く違うもので作られるから
そういう違いとなって動くんだな、位で考えてもいいかも知れません。

ちなみにコンソールアプリをコマンドプロンプト上で実行すると、新たにコマンドプロンプトは出ないデスよ。
エクスプローラなどでダブルクリックすると、コマンドプロンプト出マスよね。
コマンドプロンプトを出しているのは・・誰でしょう〜?

引用返信 編集キー/
■10277 / inTopicNo.8)  Re[7]: コマンドプロンプトを表示しないEXEの作り方
□投稿者/ サイトー (4回)-(2007/11/15(Thu) 01:18:09)
No10249 (カンタービレ さん) に返信
> アセンブリタイプによる挙動の違いを言ってマスでしょうか?
> 少なくともコンソールアプリケーションのときやクラスライブラリ、ウィンドウアプリケーションの時で
> それぞれ○○.csprojの<PropertyGroup>内にある<OutputType>の内容が違いマス。
> タイプが違うと、同じEXEでも簡単に言うとタイプの違うEXEが作られるんデス。
>
> 理由として納得するかどうか分かりませんが
> ソースのメソッド構成は一緒でもそれを動かしてくれるベース部分が全く違うもので作られるから
> そういう違いとなって動くんだな、位で考えてもいいかも知れません。

解説ありがとうございます。
自分でもう一度調べてみてちゃんと理解できるまで、そのように考えてみますね。
でも、なんとなくイメージはできました。


> ちなみにコンソールアプリをコマンドプロンプト上で実行すると、新たにコマンドプロンプトは出ないデスよ。
> エクスプローラなどでダブルクリックすると、コマンドプロンプト出マスよね。
> コマンドプロンプトを出しているのは・・誰でしょう〜?

む。少なくとも自分(exe)自身ではないですよね。
exeは「僕はコンソールアプリだよ。結果出力なんかもコンソールにするよ」と言っているので、
実行する側が、「あ、今コンソール上じゃないのにコンソールアプリ実行しようとしてるわ。まずコンソールを表示しなきゃ」
って感じでしょうか(苦笑)

でも、そう考えていくと・・・
僕が今作っているアプリケーションは、出力をコンソールに出さず、
テキストログとか、イベントログなんかに出す予定です。
それって、コンソールアプリとしては邪道だったりするんでしょうか?
引用返信 編集キー/
■10287 / inTopicNo.9)  Re[8]: コマンドプロンプトを表示しないEXEの作り方
□投稿者/ カンタービレ (51回)-(2007/11/15(Thu) 02:49:51)
No10277 (サイトー さん) に返信
> 僕が今作っているアプリケーションは、出力をコンソールに出さず、
> テキストログとか、イベントログなんかに出す予定です。
> それって、コンソールアプリとしては邪道だったりするんでしょうか?

ぃゃ、全然邪道なんて思えないデスよ。
コンソールに出た内容は、記録に残すには、出た内容をリダイレクトでファイルにでも出さないと
コンソール閉じたら残らないから分からなくなっちゃうし。

引用返信 編集キー/
■10290 / inTopicNo.10)  Re[9]: コマンドプロンプトを表示しないEXEの作り方
□投稿者/ サイトー (6回)-(2007/11/15(Thu) 09:41:08)
No10287 (カンタービレ さん) に返信

>>僕が今作っているアプリケーションは、出力をコンソールに出さず、
>>テキストログとか、イベントログなんかに出す予定です。
>>それって、コンソールアプリとしては邪道だったりするんでしょうか?
> 
> ぃゃ、全然邪道なんて思えないデスよ。
> コンソールに出た内容は、記録に残すには、出た内容をリダイレクトでファイルにでも出さないと
> コンソール閉じたら残らないから分からなくなっちゃうし。

回答ありがとうございます。
邪道ではないとわかり、安心しました。

また、コマンドプロンプトがでないようにする方法についても、
・ウインドウを持たない、Windowsアプリケーションにする。
 →上記(■10239 / inTopicNo.3))のようなソースで実現可能。

・コンソールアプリケーションで作成するが、起動する側でコマンドプロンプトの表示を抑制する。
 →以下のようなソースで実現可能。
   ProcessStartInfo psInfo = new ProcessStartInfo();
   psInfo.FileName = @"c:\MyApp\ConsoleApp.exe"; // 実行するファイル
   psInfo.CreateNoWindow = true; // コンソール・ウィンドウを開かない
   psInfo.UseShellExecute = false; // シェル機能を使用しない
   Process.Start(psInfo);

ということがわかりました。
とても助かりました。どうもありがとうございました!

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -