- ベストアンサー
[VB2008]引数付きパスでアプリケーションを起動
"*:\***" -* *** -* "***" のような形式の引数付きパスでアプリケーションを起動するにはどうすればいいでしょうか。 ご回答よろしくお願いします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
コマンドインタープリタ(XPならCMD.EXE)に引数を渡す方法で可能だと思います。 Dim psi As New System.Diagnostics.ProcessStartInfo() 'ComSpecのパスを取得する psi.FileName = System.Environment.GetEnvironmentVariable("ComSpec") psi.Arguments = "/c " & """*:\***"" -* *** -* ""***""" returnValue = System.Diagnostics.Process.Start(psi) 私も同じように悩んで、この方法で解決しました。
その他の回答 (4)
- sknbsknb2
- ベストアンサー率38% (1158/3030)
すいません、No.4の中の str ="""""C:\Program Files\WinRAR\WinRAR.exe"" X ""C:\a.rar3"" ""C:\""""" は、正しくは str ="""""C:\Program Files\WinRAR\WinRAR.exe"" X ""C:\a.rar"" ""C:\""""" でした。(a.rar3->a.rar)
お礼
Wizard_Zero様、sknbsknb2様 結局、正規表現を使って自力で起動することにしました。 ご回答ありがとうございました。 おそらく次回の質問あたりでソフトが完成すると思います。 その時も、ご回答お願いします。
- sknbsknb2
- ベストアンサー率38% (1158/3030)
No.3の補足についてお答えします。 "C:\Program Files\WinRAR\WinRAR.exe" X "C:\a.rar" "C:\" という文字列をCMD.EXEに渡して、正常に解凍されることを確認しました。 ここで注意すべきは、 (1)パスは必ずダブルクォーテーションで囲う。 (2)CMD.EXEに渡すときは、さらに文字列全体をダブルクォーテーションで囲う。 ということです。 具体的に書くと以下のようになります。 Dim returnValue As New System.Diagnostics.Process Dim psi As New System.Diagnostics.ProcessStartInfo() Dim str As String 'ComSpecのパスを取得する psi.FileName = System.Environment.GetEnvironmentVariable("ComSpec") str ="""""C:\Program Files\WinRAR\WinRAR.exe"" X ""C:\a.rar3"" ""C:\""""" psi.Arguments = "/c " & str returnValue = System.Diagnostics.Process.Start(psi) 文字列の中にダブルクォーテーションが含まれると非常にわかりにくくなるので、このあたりに注意しながらやってみてください。
- うぃず(@Wizard_Zero)
- ベストアンサー率69% (344/495)
昨日のコードに付け加える形であればこうですね。 Dim procNew As New System.Diagnostics.Process Dim stInfo As New System.Diagnostics.ProcessStartInfo("hogehoge.exe") 'stInfo.WindowStyle = Diagnostics.ProcessWindowStyle.Hidden stInfo.Arguments = """*:\***"" -* *** -* ""***""" '追加部分 procNew.StartInfo = stInfo procNew.Start() 'procNew.WaitForExit() 'Windows.Forms.MessageBox.Show(procNew.ExitCode.ToString) '終了コードを表示
補足
説明足らずだったみたいです。 *:\***は実行形式ファイルで、拡張子を省略したものです。(hogehoge.exe) 以降の-* *** -* "***"が*:\***への引数です。 文字列処理で、実行ファイルと引数で切り離すのも考えたのですが あり得ないほどコードが複雑になってしまったので断念しました。
- yyr446
- ベストアンサー率65% (870/1330)
こうですかね Sub Main() Dim WshShell As Object Dim strCommand As String Dim parm As String WshShell = CreateObject("WScript.Shell") strCommand = "*:\*** " parm = "-* *** -* ""***""" strCommand = strCommand & parm 'MsgBox(strCommand) WshShell.run(strCommand) End Sub
補足
Sub Main()というのは確かVB6のコードではなかったでしょうか? あと、自分で好きに起動したいアプリケーションを起動するわけではないので(プロファイルによるユーザー指定)なので この形式ではちょっとどうにもなりません。 ご回答ありがとうございました。
補足
ご回答ありがとうございます。 起動できそうなんですが、起動するアプリケーションのパス(*:\***)にスペースが入ると起動できなくなり ドライブルートに***を置くとComspecが構文エラーを吐き出します。 この際なので言ってしまうと、ffmpegを起動しようとしています。 実際に起動されるパスは以下のような形式です。 "{ソフトのインストールディレクトリ}\cores\ffmpeg" -y -i "入力ファイル名" -vcodec *** "出力先" 携帯動画変換君あたりのソースでも見れると参考になるのですが・・・