从当前文件夹启动.exe有时会失败

时间:2010-03-10 23:45:05

标签: c# process

我有一个应用程序通过执行以下操作启动与该应用程序位于同一文件夹中的可执行文件:

            Process procStarter = new Process();
            procStarter.StartInfo.FileName = "OtherApp.exe";
            procStart.Start();

工作正常,直到我在我的应用程序中使用文件打开或文件保存对话框。然后它找不到OtherApp.exe。

这看起来很正常吗?我可以通过将当前文件夹添加到StartInfo.Filename来解决它(以及如何获取当前文件夹)?

6 个答案:

答案 0 :(得分:10)

使用文件对话框可能会更改进程的当前目录。要访问与当前可执行文件位于同一文件夹中的文件,可以使用以下代码:

string path = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
path = Path.Combine(path, "OtherApp.exe");

答案 1 :(得分:3)

或者您可以添加到您的代码中:

saveFileDialog1.RestoreDirectory = true ;
提示输入文件名时

答案 2 :(得分:1)

问题是您可以在执行其他文件操作时更改当前工作目录。

您希望记住其他海报向您展示的路径,但您可能希望创建自己的ProcessStartInfo实例并使用ProcessStartInfo.WorkingDirectory属性,以便记住正确的路径。

答案 3 :(得分:0)

尝试显式指定OtherApp.exe的路径。

您的打开文件对话框可能正在更改当前目录。

答案 4 :(得分:0)

如果您没有明确指定文件夹,系统将查看该流程的“当前工作目录”。

当前工作目录(通常)以应用程序exe目录开始,但可以通过浏览到打开或保存对话框来更改。

使用显式文件路径是正确的答案。最好的方法是完全不依赖工作目录,而是使用当前可执行文件的文件路径作为基础。

以下是一些执行此操作的方法:Application.StartupPathApplication.ExecutablePath

代码可能看起来像这样...

var exeName = "sample.exe";
var exePath
    = Path.Combine(
        Path.GetDirectoryName( Application.ExecutablePath ),
        exeName);

答案 5 :(得分:0)

尝试System.IO.Path.Combine( System.Windows.Forms.Application.StartupPath, "myfile.exe" );

如果它不是winforms项目divo的答案是最好的(imo,在这个答案的时候)