プロが教える店舗&オフィスのセキュリティ対策術

"*:\***" -* *** -* "***"
のような形式の引数付きパスでアプリケーションを起動するにはどうすればいいでしょうか。

ご回答よろしくお願いします。

A 回答 (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)

私も同じように悩んで、この方法で解決しました。

この回答への補足

ご回答ありがとうございます。
起動できそうなんですが、起動するアプリケーションのパス(*:\***)にスペースが入ると起動できなくなり
ドライブルートに***を置くとComspecが構文エラーを吐き出します。

この際なので言ってしまうと、ffmpegを起動しようとしています。
実際に起動されるパスは以下のような形式です。
"{ソフトのインストールディレクトリ}\cores\ffmpeg" -y -i "入力ファイル名" -vcodec *** "出力先"

携帯動画変換君あたりのソースでも見れると参考になるのですが・・・

補足日時:2009/08/31 18:04
    • good
    • 0

すいません、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)
    • good
    • 0
この回答へのお礼

Wizard_Zero様、sknbsknb2様
結局、正規表現を使って自力で起動することにしました。
ご回答ありがとうございました。
おそらく次回の質問あたりでソフトが完成すると思います。
その時も、ご回答お願いします。

お礼日時:2009/09/01 23:55

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)

文字列の中にダブルクォーテーションが含まれると非常にわかりにくくなるので、このあたりに注意しながらやってみてください。
    • good
    • 0

昨日のコードに付け加える形であればこうですね。



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)
以降の-* *** -* "***"が*:\***への引数です。

文字列処理で、実行ファイルと引数で切り離すのも考えたのですが
あり得ないほどコードが複雑になってしまったので断念しました。

補足日時:2009/08/28 18:40
    • good
    • 0

こうですかね


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のコードではなかったでしょうか?

あと、自分で好きに起動したいアプリケーションを起動するわけではないので(プロファイルによるユーザー指定)なので
この形式ではちょっとどうにもなりません。
ご回答ありがとうございました。

補足日時:2009/08/28 18:44
    • good
    • 0

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