アプリ版:「スタンプのみでお礼する」機能のリリースについて

実行プログラムを選択するフォーム上で以下のようにプログラムを指定し:

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いずれでも同じ状況です。

A 回答 (1件)

こんにちは。

maruru01です。

1.
多分違うと思いますが、App.Pathがドライブ名(C:\)の場合は、"\"が2つ重なってしまうのでダメです。

2.
多分こっちだと思いますが、パスに半角スペースが入っていると、Shell関数がうまく動作しないことがあります。

FullExePath = """" & FullExePath & """"

としてから、

RetVal = Shell(FullExePath)

とすればいけると思います。
参考URLもどうぞ。

http://support.microsoft.com/default.aspx?scid=% …

この回答への補足

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

補足日時:2002/11/15 14:55
    • good
    • 0
この回答へのお礼

maruru01さん、ご回答をありがとうございます。

余分なスペースまたは\の混入を確認するために
If RetVal = 0 Then
MsgBox "##" & FullExePath & "##の実行に失敗しました"
End If

として、##との間のスペースの有無を表示してみましたが余分なスペースも\も挿入されていないようです。しかし、メッセージボックスに単にExecution Errorと表示されることもあるので、もう一度よく調べてから結果をご報告いたします。取り急ぎお礼申し上げます。
k8sato

お礼日時:2002/11/15 11:07

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!