| ■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
  | 
               
            
           
         
        
       |