2016-11-03 5 views
0

私はいくつかのコードを持っている `Process`クラスを使用しました:は私が正しく

If StartProcess = True Then 
    Dim startInfo As New ProcessStartInfo(Execution) 
    If ProcessPath <> "" Then startInfo.WorkingDirectory = ProcessPath 
    If ProcessArguments <> "" Then startInfo.Arguments = ProcessArguments 
    NumProcesses += 1 
    ExecutedProcesses(ProcessIndex) = Process.Start(startInfo) 
    ProcessIndex += 1 
    Executed = True 
Else 
    Executed = False 
End If 

私が想定している私はstartInfo.WorkingDirectoryそのための値として、プロセスのパス(プロセスが中に発見されたディレクトリ)を置く場合プログラムはそのディレクトリからプロセスを開始しようとします。本当。

+0

あなた自身で試してみませんか? –

答えて

2

私はstartInfo.WorkingDirectoryの値として、プロセスのパス(プロセスがで発見されたディレクトリ)を置く場合、プログラムはそのディレクトリからプロセスを開始しようとすることと仮定します。本当。

ProcessStartInfo.WorkingDirectory propertyShellExecute function

  1. UseShellExecuteプロパティがTrue(デフォルト)

    であれば... WORKINGDIRECTORYプロパティは、実行可能ファイルの場所を指定します。これらの二つのMSDNドキュメントのエントリに応じて3つのシナリオがあります。 WorkingDirectoryが空文字列の場合、現在のディレクトリには実行可能ファイルが含まれていると解釈されます。

    • 指定したプロセス・パスは、それがWorkingDirectoryパス内のプロセスを探します(例えばmyapp.exe)相対的である場合。ただし、プロセスパスが絶対パス(例:C:\Program Files\My App\myapp.exe)であれば、そこからプロセスパスを開始し、新しいプロセスの作業ディレクトリを指定したパスにするだけです。
  2. UseShellExecuteプロパティがFalse

    であれば... WORKINGDIRECTORYプロパティは、実行可能ファイルを検索するために使用されていません。代わりに、その値は開始されたプロセスに適用され、新しいプロセスのコンテキスト内でのみ意味を持ちます。

プロセスの作業ディレクトリは、現在のフォルダとして数えディレクトリです。たとえば、Windows 7でコマンドプロンプト(cmd)を起動すると、その作業ディレクトリは通常ユーザーパス(例:C:\Users\Vincent)になります。一方、管理者としてcmdを起動すると、作業ディレクトリはC:\Windows\System32になります。サイドノートとして


、これらのチェックはあなたがかなり無用でいます

If ProcessPath <> "" Then startInfo.WorkingDirectory = ProcessPath 
If ProcessArguments <> "" Then startInfo.Arguments = ProcessArguments 

あなたの変数がが空ている場合は、startInfoの性質だけでない、Nothingになりますこの場合、空の文字列との違いを作ります。したがって、Ifの文章を削除するのは問題ありません。

startInfo.WorkingDirectory = ProcessPath 
startInfo.Arguments = ProcessArguments