Shell関数でB.exeが二度実行される原因と解決方法

このQ&Aのポイント
  • XPでMicrosoft Visual Basic 2008 Express Editionを使用して、A.exeとB.exeを作成しました。Aを実行するとBが実行されるようなプログラムを作成したのですが、B.exeが二度実行される問題が発生しています。解決方法を教えてください。
  • A.exeとB.exeを作成し、Aを実行するとBが実行されるようなプログラムを作成しました。しかし、実行するとB.exeが二度実行されるという問題が発生しています。解決方法を教えてください。
  • XPでMicrosoft Visual Basic 2008 Express Editionを使用して、A.exeとB.exeのプログラムを作成しました。Aを実行するとBが実行されるようなプログラムを作成したのですが、B.exeが二度実行される問題が発生しています。解決方法を教えてください。
回答を見る
  • ベストアンサー

Shell関数?

いつもお世話になってます。 XPでMicrosoft Visual Basic 2008 Express Editionを使ってます。 A.exeとB.exeを作りました。 Aを実行→OKボタンを押す→Bが実行される というのを作ったんですが、 <Aのプログラム> Private Sub Button1_Click(ByVal sender As System.Object,   ByVal e As System.EventArgs) Handles Button1.Click  Shell("C:\B.exe", AppWinStyle.NormalFocus)  Me.Close() End Sub を実行するとBが二度(?)実行されて(途中で止まってるような・・・) 「別のプロセスで使用されているため、プロセスはファイル"C:\B.exe"にアクセルできません。」 となります。 ちなみにB.exeはPC起動時は常に表示されるようにつくりました。 説明が足りないかもしれませんが解決しなくて困ってます。 どうしたら解決するか教えてください。

  • q-i-p
  • お礼率59% (26/44)

質問者が選んだベストアンサー

  • ベストアンサー
  • wathavy
  • ベストアンサー率22% (505/2263)
回答No.2

すみません。VBは使わないので、ソースはVC++なのですが、同じことだとおもいます。 wchar_t lpAddress[]=L"www.google.com"; ret = (int)(::ShellExecute(NULL,_T("open"),L"C:\\Program Files\\Mozilla Firefox\\firefox.exe",lpAddress,NULL,SW_SHOW) ); if(ret<32){ return ; } スペースが入っても問題はないかと思います。 フルパスにしたほうが確実に動作します。

q-i-p
質問者

お礼

ありがとうございます おかげさまで思ったとおりに動きました。

その他の回答 (1)

  • wathavy
  • ベストアンサー率22% (505/2263)
回答No.1

問題の切り分けのために、Aで実行するプログラムをnotepad.exeのような確実に実行できるものに変えて、どうなるか観察してみていただけませんか?

q-i-p
質問者

お礼

ちなみに Dim myFilePath As String = "C:\Program Files\test file" Shell(myFilePath & "\B.exe", AppWinStyle.NormalFocus) とやってもだめでした;;

q-i-p
質問者

補足

Shell("C:\WINDOWS\notepad.exe", AppWinStyle.NormalFocus) とやってみたところメモ帳はしっかりと起動しました。 (エラーは出ませんでした) ふと思ったのですが 質問文は例として Shell("C:\B.exe", AppWinStyle.NormalFocus) にしてありますが Shell("C:\Program Files\test file\B.exe", AppWinStyle.NormalFocus) のようにフォルダ名に空白がある場合とか なにか関係するのでしょうか?

関連するQ&A

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

    フォームの中にボタン(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 このとき、コマンドライン引数を渡すにはどのようにすればよいでしょうか? どなかたご教授いただけると助かります。どうぞよろしくお願い致します。

  • VB2008EEのラジオボタンのチェック無し

    VB2008EEのラジオボタンのチェック無し     4つにチェックを入れてしまうと、全ての変数に値が入ってしまい、ボタンクリック時にチェックが 入っていないのを含めて、batファイル4つとも実行されてしまいます。 チェックボックスだと、下記でチェックされていないもの値を変えられます。 If CheckBox1.CheckState = CheckState.Unchecked Then   aaa = "9" End If ラジオボタンでチェックされていない所の変数を変える事は出来るでしょうか? Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click If (aaa = "1") Then Shell("cmd /c xxx.bat", AppWinStyle.NormalFocus, True) End If If (bbb = "2") Then Shell("cmd /c yyy.bat", AppWinStyle.NormalFocus, True) End If If (ccc = "3") Then Shell("cmd /c zzz.bat", AppWinStyle.NormalFocus, True) End If If (ddd = "4") Then Shell("cmd /c www.bat", AppWinStyle.NormalFocus, True) End If End Sub Private Sub RadioButton1_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton1.CheckedChanged aaa = "1" End Sub Private Sub RadioButton2_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton2.CheckedChanged bbb = "2" End Sub Private Sub RadioButton3_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton3.CheckedChanged ccc = "3" End Sub Private Sub RadioButton4_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton4.CheckedChanged ddd = "4" End Sub

  • VB2008EEのラジオボタンのチェック無し

    VB2008EEのラジオボタンのチェック無し     4つにチェックを入れてしまうと、全ての変数に値が入ってしまい、ボタンクリック時にチェックが 入っていないのを含めて、batファイル4つとも実行されてしまいます。 チェックボックスでも同じような記述をしていまして、下記の記述でチェックされていないものの値を変えられます。 If CheckBox1.CheckState = CheckState.Unchecked Then   aaa = "9" End If Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click If (aaa = "1") Then Shell("cmd /c xxx.bat", AppWinStyle.NormalFocus, True) End If If (bbb = "2") Then Shell("cmd /c yyy.bat", AppWinStyle.NormalFocus, True) End If If (ccc = "3") Then Shell("cmd /c zzz.bat", AppWinStyle.NormalFocus, True) End If If (ddd = "4") Then Shell("cmd /c www.bat", AppWinStyle.NormalFocus, True) End If End Sub Private Sub RadioButton1_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton1.CheckedChanged aaa = "1" End Sub Private Sub RadioButton2_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton2.CheckedChanged bbb = "2" End Sub Private Sub RadioButton3_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton3.CheckedChanged ccc = "3" End Sub Private Sub RadioButton4_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton4.CheckedChanged ddd = "4" End Sub レベル低いといきなりラスボスは倒せないので、目先のミッションクリアが目的です。 応用は後々学んで行きます。 「ラジオボタンでチェックされていない所の変数を変える事は出来るでしょうか?」  

  • VB2008EEのラジオボタンのチェック無し

    VB2008EEのラジオボタンのチェック無し     4つにチェックを入れてしまうと、全ての変数に値が入ってしまい、ボタンクリック時にチェックが 入っていないのを含めて、batファイル4つとも実行されてしまいます。 チェックボックスでも同じような記述をしていまして、下記の記述でチェックされていないものの値を変えられます。 If CheckBox1.CheckState = CheckState.Unchecked Then   aaa = "9" End If Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click If (aaa = "1") Then Shell("cmd /c xxx.bat", AppWinStyle.NormalFocus, True) End If If (bbb = "2") Then Shell("cmd /c yyy.bat", AppWinStyle.NormalFocus, True) End If If (ccc = "3") Then Shell("cmd /c zzz.bat", AppWinStyle.NormalFocus, True) End If If (ddd = "4") Then Shell("cmd /c www.bat", AppWinStyle.NormalFocus, True) End If End Sub Private Sub RadioButton1_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton1.CheckedChanged aaa = "1" End Sub Private Sub RadioButton2_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton2.CheckedChanged bbb = "2" End Sub Private Sub RadioButton3_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton3.CheckedChanged ccc = "3" End Sub Private Sub RadioButton4_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton4.CheckedChanged ddd = "4" End Sub レベル低いといきなりラスボスは倒せないので、目先のミッションクリアが目的です。 応用は後々学んで行きます。 「ラジオボタンでチェックされていない所の変数を変える事は出来るでしょうか?」

  • 【続き】windowsペイントを開く方法

    http://oshiete1.goo.ne.jp/qa4460498.htmlの続きです。 上記の方法で開きましたが、これをButton1で現在表示されている 画像をwindowsペイントで編集したい場合、 どの様なコードを打てば宜しいのですか? Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click MsgBox("Windowsペイントを起動します。") Shell("c:\windows\system32\mspaint.exe", AppWinStyle.NormalFocus) End Sub 上記ではただ起動するだけでペイントには画像を態々開かないと ダメですよね。 いい方法教えて下さい。

  • コマンドプロンプトを終了せずにリダイレクトするには?

    コマンドプロンプトを終了せずにリダイレクトするには? VBからコマンドプロンプトを操作し、結果をLabelに貼り付けることを考えています。 しかし、コマンドプロンプトを起動するプロセスにリダイレクト設定をしたところ、実行するたびに終了してしまい、その後のコマンド入力でプロセスが見つからずエラーとなってしまいます。コマンドプロンプトは終了せずにリダイレクトの設定する方法を教えて頂けないでしょうか。 また、コマンドプロンプト自体は表示させずに実行できるのが理想なので、やり方のヒントだけでも頂けると助かります。 操作例(VBのボタンから):cmd.exe起動 → cd c:\ → dir エラー内容:プロセス 'c:\windows\system32\cmd.exe' が見つかりませんでした。 動作環境:VB2005、Windows XP ============================== Public Class Form1 Private Sub Button19_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button19.Click Dim P1 As New System.Diagnostics.Process P1.StartInfo.UseShellExecute = False P1.StartInfo.RedirectStandardOutput = True P1.StartInfo.FileName = "cmd.exe" P1.Start() End Sub Private Sub Button12_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button12.Click AppActivate("c:\windows\system32\cmd.exe") SendKeys.SendWait("CD c:\{Enter}") Label5.Text = P1.StandardOutput.ReadToEnd() End Sub Private Sub Button11_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button11.Click AppActivate("c:\windows\system32\cmd.exe") SendKeys.SendWait("DIR{Enter}") Label5.Text = P1.StandardOutput.ReadToEnd() End Sub

  • VBのこのコードの意味を教えてください。(至急)

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click このコードの意味を教えてください。 よろしくお願いします。

  • 変数の値について

    変数の値について教えてください。 VB2010 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Dim A As Single A = 2.0 MsgBox(A) End Sub 上記のプロシジャを実行するとメッセージボックスに2と表示され 2.0と表示しません。 2.0と表示させるには、どのようにすればよいなでしょうか。

  • Call文 でデバックできません。

    VB初心者です。 Win2003Sarver+SQL2000+VB.Net2008の組合せで作っています。 Call文で下記の様にすると Private Sub Button自動1600_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button自動1600.Click Call Button1600_Click() <--ここでデバックできません。 End Sub Private Sub Button1600_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1600.Click Me.洗浄機記録BindingSource.AddNew() Me.日付TextBox.Text = Now End Sub Call Button1600_Click() デバックできません。 下記の様にすると動きます。 Private Sub Button自動1600_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button自動1600.Click Call B1600() End Sub Private Sub B1600 Me.洗浄機記録BindingSource.AddNew() Me.日付TextBox.Text = Now End Sub Call先に Click(ByVal sender As System.Object, ByVal e As System.EventArgs) が あると引数か何かが必要になるのでしょうか。 ご存知の方教えてください。

  • Buttonを押してもファンクションF1を押しても同じコードを実行したい

    VS.NETでの開発です。 初歩的な質問ですいません。 フォームにButton1を貼り付けて、以下でButton1がクリックされたときにコードが実行されますが、 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click End Sub ファンクションF1を押しても、同じコードが実行されるようにしたいのですが、 どのようにコードを記述すればよろしいでしょうか?

専門家に質問してみよう