• 締切済み

App.Pathの失敗について

実行プログラムを選択するフォーム上で以下のようにプログラムを指定し: FullExePath = App.Path & "\program1.exe" 中略:選択条件 FullExePath = App.Path & "\program2.exe" 中略:選択条件 FullExePath = App.Path & "\program3.exe" プログラムを実行するフォーム上で以下のように実行すると、ときどき失敗することがあります: RetVal = Shell(FullExePath) If RetVal = 0 Then MsgBox FullExePath & "の実行に失敗しました。" End If 失敗した場合に備えて上記のようなメッセージボックスを指定しておくと、実行に失敗したときには正しいフルパスが表示されます。 なぜ、プログラムの実行に失敗することがあるのでしょうか? 失敗するのは最初に選択して実行したときではなくて、2回目以降選択したときのようです。 Visual Basic Version 6を使用しています。 Windows XP、Windows 98いずれでも同じ状況です。

みんなの回答

  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.1

こんにちは。maruru01です。 1. 多分違うと思いますが、App.Pathがドライブ名(C:\)の場合は、"\"が2つ重なってしまうのでダメです。 2. 多分こっちだと思いますが、パスに半角スペースが入っていると、Shell関数がうまく動作しないことがあります。 FullExePath = """" & FullExePath & """" としてから、 RetVal = Shell(FullExePath) とすればいけると思います。 参考URLもどうぞ。 http://support.microsoft.com/default.aspx?scid=%2Fisapi%2Fgomscom%2Easp%3Ftarget%3D%2Fjapan%2Fsupport%2Fkb%2Farticles%2Fjp417%2F0%2F89%2Easp&LN=JA

k8sato
質問者

お礼

maruru01さん、ご回答をありがとうございます。 余分なスペースまたは\の混入を確認するために If RetVal = 0 Then MsgBox "##" & FullExePath & "##の実行に失敗しました" End If として、##との間のスペースの有無を表示してみましたが余分なスペースも\も挿入されていないようです。しかし、メッセージボックスに単にExecution Errorと表示されることもあるので、もう一度よく調べてから結果をご報告いたします。取り急ぎお礼申し上げます。 k8sato

k8sato
質問者

補足

maruru01さん、ありがとうございました。 urlが参考になりました。おかげさまでエラーの原因がわかりました。 FullExePath = App.Path & "\program3.exe" 中略 RetVal = Shell(FullExePath) If RetVal = 0 Then MsgBox FullExePath & "の実行に失敗しました。" Else Set MyObject1 = CreateObject("Scripting.FileSystemObject") Set MyObject2 = MyObject1.GetFile(SrcPath & "\" & SrcFile) End If 質問には書かなかったのですが、上記Else以下で実行結果ファイルのコピー先を 指定していました。FullExePathが正常に実行されているときにShellから0以外が 返されるため、ファイルのコピー先が指定されないでエラーとなっていました。 exeファイルが正常に実行されてもShell()から0が返されないことがあるようですね? k8sato

関連するQ&A