2010-03-10 39 views
4

我有一个应用程序启动一个可执行文件是在同一文件夹中的应用程序,这样做:从当前文件夹启动一个.exe有时会失败

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

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

这是否正常?我可以通过将当前文件夹添加到StartInfo.Filename(以及如何获取当前文件夹)来修复它?

回答

10

使用文件对话框可能改变你的进程的当前目录。要访问一个文件在同一文件夹作为当前可执行文件,你可以使用下面的代码:

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

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

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

0

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

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

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

这里有一些方法可以做到这一点:Application.StartupPathApplication.ExecutablePath

代码可能是这个样子......

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

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

saveFileDialog1.RestoreDirectory = true ; 

提示文件名时。

1

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

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

0

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

如果它不是一个WinForms项目DIVO的回答是最好的(IMO,在这个答案的时间)

相关问题