■66826 / inTopicNo.3) |
Re[1]: アプリから別のアプリケーションを実行する |
□投稿者/ 魔界の仮面弁士 (229回)-(2013/05/29(Wed) 22:06:32)
|
■No66823 (YM さん) に返信 > Shell(My.Application.Info.DirectoryPath & "\Test.exe " & strPassWord & "#" & strCD & "#" & strID & "#" & strNo, AppWinStyle.NormalNoFocus)
たとえば Shell("C:\Program Files\Sample\Test.exe pass#word#123#456", AppWinStyle.NormalNoFocus) の場合、 引数に渡した文字列は「C:\Program Files\Sample\Test.exe pass#word#123#456」を意味します。
この場合 (1)「C:\Program Files\Sample\Test.exe」を実行して「pass#word#123#456」を渡す (2)「C:\Program」を実行して「Files\Sample\Test.exe pass#word#123#456」を渡す (3)「C:\Program Files\Sample\Test.exe pass#word#123#456」を実行して何も渡さない のいずれかが曖昧になってしまいます。
普通に考えれば 1 の動作となることが期待されますが、もしも C:\Program Files\Sample\ 内に 「notepad.exe pass#word#123#456.exe」が配置されていれば 3 として処理されますし、 あるいは「C:\Program.exe」があれば、2 の動作になってしまいます。
そのため、空白を含んでいる場合には、 Shell("""C:\Program Files\Sample\Test.exe"" pass#word#123#456", AppWinStyle.NormalNoFocus) のように、パスの前後を「"」で囲むことが望ましいです。
> Process クラスを使って引数を引き渡したいのですが Process の場合は、既に Hongliang さんが回答されていますように、 ファイル名と引数を別々に指定することになります。
例えば、 Dim prc As Process = Process.Start("C:\Program Files\Sample\Test.exe", "pass#word#123#456") であるとか、 Dim si As New ProcessStartInfo("C:\Program Files\Sample\Test.exe") si.Arguments = "pass#word#123#456" Dim prc As Process = Process.Start(si) とか Dim prc As New Process() Dim si As ProcessStartInfo = prc.StartInfo si.FileName = "C:\Program Files\Sample\Test.exe" si.Arguments = "pass#word#123#456" prc.Start() などといった具合です。
>「指定されたファイルが見つかりません。」というエラーが出ます > prc.StartInfo.FileName = "Test.exe" & strPassWord & "#" & strCD & "#" & strID & "#" & strNo ということで、『ファイル名と引数を別々に指定すべし』というのが回答なのですが、 それを差し引いて考えても、上記は exe の後ろに空白が含まれていませんので、 どちらにせよ NG でしょうね。(^^;
> 又、Test側もどうやって、引数を受け取っていいのかわかりません (案1) Main メソッドの引数から取得する。 (案2) 「Dim s As String = Command()」を利用する。 (案3) My.Application.CommandLineArgs を利用する。 (案4) Environment.CommandLine を利用する。 (案5) Environment.GetCommandLineArgs を利用する。
なお、もしも引数が空白等で区切られていた場合、 String 型で受け取るもの(2、4)は、空白も含めた引数全体が渡されます。
String 配列で受け取るもの(1, 5)は、それぞれ区切られてから渡されます。 3 も同様に、区切られて ReadOnlyCollection(Of String) に渡されます。
http://dobon.net/vb/dotnet/programing/commandline.html http://msdn.microsoft.com/ja-jp/library/ms235406.aspx
|
|