我有一个非常奇怪的情况。
在我们公司,我们开发了由几个模块组成的大型Web应用程序。每个模块分为服务器上的单独文件夹。有一个模块可以启动映射到用户L:\ app.exe磁盘上的应用程序。
我的目标是更新调用方法,该方法首先启动模块内的switcher.exe文件,然后启动L:\ app.exe,就像之前一样。
问题是,当我在我的本地构建这个模块时它工作得很好但是当我从服务器上的bin \ Debugg下载内容时 - 包括swither.exe(比如在Dev环境中)应用程序无法找到“切换器” .exe“在服务器上的文件夹中。它抛出一个异常,说{“系统找不到指定的文件”}。
背后的代码非常简单:
private void LaunchSwitherExe()
{
string executionPath = System.IO.Path.GetDirectoryName(
System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase);
MessageBox.Show(executionPath);
Process themeSwitchProc = new Process();
themeSwitchProc.StartInfo.FileName = "Switcher.exe";
themeSwitchProc.StartInfo.WorkingDirectory = executionPath;
themeSwitchProc.Start();
}
消息框显示(用于测试目的)swither.exe的路径。这条路是绝对正确的。它里面有swither.exe。
你有什么想法吗?
--- --- UPDATE
字符串到路径的问题方式。这样:
string executionPath = System.IO.Path.GetDirectoryName(
System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase);
可以改为:
string exeDir = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
Directory.SetCurrentDirectory(exeDir);
感谢所有回答的人,特别是“Rick S”。
答案 0 :(得分:1)
您是否认为可能是权限问题?什么进程Id是在其下运行的代码,是否可以访问该文件夹?
我也发现了这个:
When the UseShellExecute property is false, gets or sets the working directory for the
process to be started. When UseShellExecute is true, gets or sets the directory that
contains the process to be started.
也许试试这个: Defining a working directory for executing a program (C#)