0

これは簡単な質問です。私は何かが足りない可能性が高いので、誰かがすぐに答えられると確信しています。

次のディレクトリレイアウトがあるとしましょう

Folder1
  -> CurrentlyRunning.EXE
  -> Folder2
     ProcessToStart.Bat
     ApplicationToStartFromBat.exe

これは、アプリケーション内のコードです。

CurrentRunning.EXE:

        var proc = new Process
            {
                StartInfo =
                    {
                        FileName = "Folder2/ProcessToStart.Bat",
                        WindowStyle = ProcessWindowStyle.Hidden,
                        CreateNoWindow = true,
                        UseShellExecute = false
                    }
            };

        proc.Start();

ProcessToStart.Bat:

START ApplicationToStartFromBat.exe

ここで、ProcessToStart.Batをダブルクリックして実行すると、ApplicationToStartFromBat.exeが問題なく開きます(これは良いことです)。CurrentRunning.EXE(上記で投稿したコードを実行します)を実行すると、BATファイルが失敗し、EXEが見つからないと表示されます(これは本当に奇妙です)。

BATファイルを次のように変更した場合:

START Folder2/ApplicationToStartFromBat.exe

次にCurrentlyRunning.EXEを実行すると、batはApplicationToStartFromBat.exeを適切に開きます。私の問題は、何らかの理由でバット内のコードを変更できないことです。

batファイルの検索ルートディレクトリが変更されるのはなぜproc.Start()ですか。また、これを防ぐにはどうすればよいですか。

ありがとう

4

1 に答える 1

1

exeファイルの作業ディレクトリがどこにあるかと関係があると思います。

ProcessStartInfo.WorkingDirectoryを使用して、バッチファイルの正しいディレクトリを設定してみてください。

var proc = new Process
{
    StartInfo =
    {
        FileName = "Folder2/ProcessToStart.Bat",
        WorkingDirectory = "DirectoryPath";
        WindowStyle = ProcessWindowStyle.Hidden,
        CreateNoWindow = true,
        UseShellExecute = false
    }
};
proc.Start();
于 2012-11-28T09:23:04.903 に答える