【问题标题】:Starting process from another process causes unhandled exception从另一个进程启动进程导致未处理的异常
【发布时间】:2015-10-06 10:05:02
【问题描述】:

我有一个通过Process 运行的控制台应用程序。在这个控制台应用程序中,我也在通过一个进程运行另一个 exe

当我在 bin 文件夹中双击 Run.exe 时,应用程序工作正常。但是当我通过代码运行它时,它会抛出一个未处理的异常。

启动控制台应用的代码:

ProcessStartInfo info = new ProcessStartInfo();
info.FileName = @"C:\_Core\Server\bin\Debug\ServerManager.exe";
Process process = new Process();
Process.Start(info);

控制台应用程序中运行另一个 exe 的代码:

ProcessStartInfo info = new ProcessStartInfo();
info.FileName = @"C:\_Core\Client\bin\Debug\Run.exe";
Process process = new Process();
Process.Start(info);

【问题讨论】:

  • 显示代码。看起来Form_Load 处理程序读取了一个不存在的文件,因为您的启动目录不同。
  • @CodeCaster 我只是在运行exe。我想知道它与仅双击有何不同。
  • 我解释了区别,它是启动目录。
  • @CodeCaster 我很困惑,你能扩展一下吗?谢谢
  • 没有。显示抛出的代码,然后您可以获得不需要变通方法的答案。 是否您正在阅读表单的Load 事件处理程序中的文件?

标签: c# exception process console


【解决方案1】:

可能是启动目录的值错误。试试这个:

info.FileName = @"C:\_Core\Client\bin\Debug\Run.exe";
info.WorkingDirectory = Path.GetDirectoryName(info.Filename);
Process.Start(info);

但最好的方法肯定是从您的Form.Load 上的被调用应用程序中修复它,例如

// On the main form
private void Load() 
{
// Before doing anything, fix your current directory :
    string exeDir =  Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
    Directory.SetCurrentDirectory(exeDir);

   ..........
}

【讨论】:

  • 运行的exe 是否来自不同的目录有关系吗?目前我正在硬编码exe 路径
  • 是的,这很重要。如果您希望它从不同的目录运行,请检查我所做的编辑。
  • 你不应该从调用者那里解决这个问题。获取可执行文件在被调用者中的位置,并从那里使用相对路径。
猜你喜欢
  • 1970-01-01
  • 2015-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多