• 締切済み

C#でEXEを閉じるとエラー

myProcess.StartInfo.FileName = @"C:\Program Files\Sample\Sample(1)\Sample.exe"; myProcess1.Start(); myProcess.StartInfo.FileName = @"C:\Program Files\Sample\Sample(2)\Sample.exe"; myProcess2.Start(); 上記として、開いたウィンドウを閉じるボタンで終了した際にエラーとなります。 プロセスを一つにすると、エラーが出ないため、同一名のプロセスが原因しているのかと思うのですが、処理の仕方がわかりません。 myProcess1.Exited += new EventHandler(myProcess_Exited); myProcess2.Exited += new EventHandler(myProcess_Exited); private void myProcess_Exited(object sender, System.EventArgs e) { Process exitProcess = (Process)sender; exitProcess.Dispose(); } としてもエラーになりました。 今後、Sample.exeは6つ開きたいのですが、2つでつまづいています。 対処法をご存知の方がおられましたら、アドバイスよろしくお願いいたします。

みんなの回答

回答No.3

添付の画像は.NET Framework自体が出す例外には含まれることのない文字列です。 そのダイアログをだしているのはSample.exeの方ではないでしょうか。 つまり,Sample.exe側にバグがあり,複数起動した結果,それを踏んでしまったと推測します。

amuhiro
質問者

お礼

アドバイスありがとうございます。 Sample.exeをダブルクリックで同数起動しても問題ないのですが、プログラムから呼び出すと上記エラーとなってしまいます。 上記プログラムから呼び出す場合と、ダブルクリックで呼び出す場合とでは何が違うのか検討が付きません。 何か手は無いでしょうか?

  • chie65535
  • ベストアンサー率43% (8522/19371)
回答No.2

コピペで一箇所直し忘れた。 Process myProcess1 = new Process(); Process myProcess2 = new Process(); myProcess1.StartInfo.FileName = @"C:\Program Files\Sample\Sample(1)\Sample.exe"; myProcess1.Start(); myProcess2.StartInfo.FileName = @"C:\Program Files\Sample\Sample(2)\Sample.exe"; myProcess2.Start();

  • chie65535
  • ベストアンサー率43% (8522/19371)
回答No.1

Process myProcess1 = new Process(); Process myProcess1 = new Process(); myProcess1.StartInfo.FileName = @"C:\Program Files\Sample\Sample(1)\Sample.exe"; myProcess1.Start(); myProcess2.StartInfo.FileName = @"C:\Program Files\Sample\Sample(2)\Sample.exe"; myProcess2.Start(); じゃないの? なんで両方とも myProcess.StartInfo.FileName = myProcess.StartInfo.FileName = になってるの?

amuhiro
質問者

補足

ごめんなさい。 タイプミスしました。 オブジェクト作成は Process myProcess1 = new Process(); Process myProcess2 = new Process(); myProcess1.StartInfo・・・ myProcess2.StartInfo・・・ としています。

関連するQ&A

  • Processクラスが正常に動作しません。

    VisualStudio .NET2003でProcessクラスを利用してPDFファイルを自動的に印刷するプログラムを作っていますが、正常に動作しなくて困っています。タスクマネージャーを確認してみると、Adobe Readerのプロセスが実行されていることが分かったのですが、印刷処理は実行されないままになっています。 下記にコードを記載しますのでアドバイスよろしくお願いします。 Process myProcess = new Process(); myProcess.StartInfo.FileName = ”MyFile.pdf"; myProcess.StartInfo.Verb = "Print"; myProcess.StartInfo.CreateNoWindow = true; myProcess.Start();

  • c# 他プロセス起動 リダイレクト(入力) バイナリファイルの場合

    現在、c#で他プロセスを起動させるプログラムを組んでいるのですが、リダイレクトでつまづいています。 (コンパイルが出来ない->どう記述すれば良いのか分からない。) ファイルストリームのReadはデータをByteの配列に格納しますが、リダイレクト入力のwriteはcharの配列を引数としているみたいで、どう記述すれば良いのか分かりません。 記述方法または参考URLを教えていただけないでしょうか? --source--  System.IO.Stream retstream = new FileStream(wkPath, FileMode.Open, FileAccess.Read, FileShare.Read);  System.Diagnostics.Process myProcess = new System.Diagnostics.Process();  myProcess.StartInfo.FileName = "C:\\Program Files\\proc\\process.exe";  myProcess.StartInfo.UseShellExecute = false;  myProcess.StartInfo.RedirectStandardInput = true;  myProcess.StartInfo.RedirectStandardOutput = true;  if (strmInput.Length > 0) {   int num = 0;   byte[] bufWk = new byte[65536];   while (true) {    num = strmInput.Read(bufWk, 0, bufWk.Length);    if (num == 0) {     break;    }    myProcess.StandardInput.Write(bufWk, 0, num); //←コンパイルエラー   }  } --エラー内容-- System.IO.TextWriter.Write(char[], int, int)' に最も適しているオーバーロード メソッドには無効な引数がいくつか含まれています。 引数 '1': 'byte[]' から 'char[]' に変換できません。

  • C#でIISでPDFを印刷する方法

    VisualStudioでC#/ASP.netでPDFファイルをサイレント印刷するプログラムを実装しています。 「VisualStudio開発サーバーを使用する」の状態だと、 問題なく動作するのですが 「IIS Webサーバーの仕様」にすると 下記コードが全く反応しなくなります。 プリンタのプロパティ(セキュリティ)には 「Network Service」の「実行権限」を追加しています。 コードは、以下です。原因に何か心当たりのある方は、ご教授下さい。 Process printProcess = new Process(); string filePath = null; try { filePath = "C:\\PDFPRINT\\Output\\out.pdf"; printProcess.StartInfo.FileName = "C:\\Program Files (x86)\\Adobe\\Reader 10.0\\Reader\\AcroRd32.exe"; printProcess.StartInfo.Verb = "open"; printProcess.StartInfo.Arguments = " /h /t " + filePath + " EPSON PX-404A"; printProcess.StartInfo.WindowStyle = ProcessWindowStyle.Hidden; printProcess.Start(); printProcess.WaitForExit(1500); } catch { throw; } finally { if (!printProcess.HasExited) { printProcess.Kill(); printProcess.Dispose(); } }

  • コマンドライン引数について

    フォームの中にボタン(button1)があり、ボタンを押すと別のアプリケーションを起動するようなプログラムを作っています。 別アプリケーションを起動するのに次のようにShell関数を使ってコマンドライン引数"A"を渡していますが、     Shell("Test.exe A", AppWinStyle.NormalFocus) アプリケーションの終了を確認する必要があり、ProcessコンポーネントのExitedイベントを利用したいので、Shell関数を止めて以下のようなコードにしたいと思っています。 Private Sub Button1_Click(ByVal sender As System.Object, _             ByVal e As System.EventArgs) Handles Button1.Click     Process1.StartInfo.FileName = "Test.exe"     Process1.Start() End Sub Private Sub Process1_Exited(ByVal sender As System.Object, _             ByVal e As System.EventArgs) Handles Process1.Exited     '(ここにアプリケーション終了時の処理コードを記述) End Sub このとき、コマンドライン引数を渡すにはどのようにすればよいでしょうか? どなかたご教授いただけると助かります。どうぞよろしくお願い致します。

  • C# コマンドプロンプト画面で表示された文字の取得

    Windowsフォームアプリケーションからコマンドプロンプトを起動して、コマンドを実行した際に出る出力をフォームアプリケーション側から受け取ろうとしています。 テスト内容では成功するのですが、受け取りたい対象の内容は取得できずに困っています。 例えばコマンドプロンプト上で hoge と入力し実行すると 「'hoge' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。」 と表示されます。 しかし、前述カッコ内の表示をアプリケーション側から受け取ることが出来ませんでした。 どのようにすれば受け取ることができるでしょうか? 単純な path などを実行した場合は受け取れました。 以下が試した内容です。 Process ps = new Process(); ps.StartInfo.FileName = Environment.GetEnvironmentVariable("ComSpec"); ps.StartInfo.Arguments = @"/C hoge"; ps.StartInfo.UseShellExecute = false; ps.StartInfo.RedirectStandardOutput = true; ps.StartInfo.CreateNoWindow = true; ps.Start(); string output = ps.StandardOutput.ReadToEnd(); ps.WaitForExit(); ps.Dispose(); MessageBox.Show(output);//空の内容しか表示されない //テストで hoge を path にした際はシステム環境変数が表示された ・環境 Windows 7 Professional 64bit VC# 2010 Express よろしくお願いいたします。

  • コマンドプロンプトを表示せずにプロセスの起動

    VB.NETでソースファイルをJ2sk142(javac.exe)に渡してコンパイルの結果をコマンドプロンプトではなくVBのTextBoxに表示するプログラムを作成しています。 でも、プロセスを起動すると一瞬だけプロンプトが表示されます。 これを表示させない方法はありますでしょうか? With Process1 .StartInfo.FileName=JAVACPATH .StartInfo.Arguments=TextBox.Text .StartInfo.WorkingDirectory=ProPath .StartInfo.UseShellExecute = False .StartInfo.ErrorDialog = True .EnableRaisingEvents = True .StartInfo.RedirectStandardOutput = True .StartInfo.RedirectStandardError = True .StartInfo.WindowStyle = ProcessWindowStyle.Hidden End With Try Process1.Start() OutPutTextBox.Text &= Process1.StandardOutput.ReadToEnd OutPutTextBox.Text &= Process1.StandardError.ReadToEnd Process1.WaitForExit() Catch ex As Exception

  • 外部アプリを操作するプログラムについてC#

    環境 OS:Windows Vsita Business 開発言語:Microsoft Visual Studio 2005(VC#) 他の人が作成した.exeファイルを利用して .exeファイル起動 ↓ openボタン押下(コントロールID:000032) ↓ "開く"ダイアログでtextBoxにファイル名挿入 ↓ "開く"ボタン押下 ・ ・ ・ というような事をしたいのですが 現在下記のようなところまでしかできていません。  Process extProcess = new Process();  extProcess.StartInfo.FileName = ExePath_textBox.Text;  extProcess.Start(); どのようなプログラミングしていけばよいのでしょうか。 ご教示ください。 よろしくお願いいたします。

  • C#で実行形式ファイル(*.exe)を起動したい

    C#で実行形式ファイル(*.exe)を起動したいのですが、以下のようにしました。 しかし、うまくいきません。なぜでしょうか? コマンドプロンプトから実行すればまったく同じ引数でもうまくいきます。 したがって引数の書式に問題があるとは思えません。 これを実行するとコマンドプロンプトのウィンドウが表示され2秒後に消えます。 しかし、作成されているべきふたつのファイル(rangeとtrain.scale)が作成されていません。 急いでいます。 よろしくお願いいたします。 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Diagnostics; using System.Threading; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { try{ Process myProcess ; myProcess = Process.Start(@"C:\Users\youzan\svm-scale.exe", @"-l -1 -u 1 -s           range train.txt > train.scale"); Thread.Sleep(2000); myProcess.CloseMainWindow() ; myProcess.Close(); } catch(Exception e) { Console.WriteLine("The following exception was raised: "); Console.WriteLine(e.Message); } } } }

  • MySQLInstanceConfig.exe の実行エラー

    Windows VistaにMySQL5.0をインストールした後に、 スタートメニューの[すべてのプログラム]からMySQLInstanceConfig.exeを選択して実行すると、 以下の内容のポップがアップします。 C:\Program Files\MySQL\MySQL Server 5.0\binMySQLInstanceConfig.exe --------------------------------------------------------------- このアプリケーションのサイド バイ サイド構成が正しくないため、 アプリケーションを開始できませんでした。詳細については、 アプリケーションのイベントログを参照してください。 --------------------------------------------------------------- アプリケーションログの内容は以下の通りです。 ログの名前: アプリケーション ソース: SideBySide イベントID: 63 レベル: エラー (内容) "C:\Program Files\MySQL\MySQL Server 5.0\bin\MySQLInstanceConfig.exe" の アクティブ化コンテキストの生成に失敗しました。マニフェストまたは ポリシー ファイル "C:\Program Files\MySQL\MySQL Server 5.0\bin\MySQLInstanceConfig.exe" 行 6 のエラーです。 要素 "urn:schemas-microsoft-com:asm.v1^requestedPrivileges" の属性 "level" に 無効な値 "asAdministrator" が指定されています。 どなたか原因と対処方法について教えて頂けますでしょうか?

    • ベストアンサー
    • MySQL
  • C# Process.Startメソッドで複数引数を渡したい

    タイトルの通り、Process.Startメソッドで起動するアプリに複数2つ以上の引数を渡し、実行させたいのですが、方法がわかりません。 以下、サンプル1のように引数が1つならいいのですが、 サンプル2のように2つ以上の引数の場合、どうしたらよいでしょうか?ご存知の方、ご教授お願いいたします。 [サンプル1] Process.start(abc.exe, "c:\abc.txt") [サンプル2] Process.start(abc.exe, "c:\abc.txt", "c:\def.txt")

専門家に質問してみよう