【问题标题】:Getting error trying to start process尝试启动进程时出错
【发布时间】:2014-09-08 12:16:08
【问题描述】:
foreach (var process in Process.GetProcessesByName("SnippingTool"))
{
    process.Kill();
    Thread.Sleep(5000);
    process.Start();
}

我正在尝试使用 Process 重新启动 .exe。为什么这不起作用?认为它应该能够找到该进程,因为它成功杀死它。

收到此错误:

System.InvalidOperationException:无法启动进程,因为文件 未提供姓名

编辑:澄清一下,process.Kill 有效,是 Start() 获得异常。

【问题讨论】:

  • 我认为归结为您获取进程的方式意味着永远不需要可执行路径(因为它已经在运行),因此永远不会设置文件名参数跨度>
  • 在 Process.Start 执行前检查 FilName 和 WorkDirectory 属性是否设置正确。
  • process.Kill() 需要 ProcessId。它不需要进程物理位置。并且 GetProcessesByName 不提供进程位置。所以那个 process.Start() 不能重启进程。

标签: c# process


【解决方案1】:

问题是您没有获得进程的文件位置,并且它不知道如何启动它。执行以下操作将起作用,但是如果您运行的是 64 位计算机,则应确保以 64 位编译程序(项目属性 -> 构建 -> 平台目标:x64)

foreach (Process process in Process.GetProcessByName("SnippingTool"))
{
    string fullPath = process.MainModule.FileName;
    process.Kill();
    Thread.Sleep(5000);
    Process.Start(fullPath);
}

我已经测试过了,它对我有用

【讨论】:

  • 嗯...由于 System.ComponentModel.Win32Exception (0x80004005) 无法访问它:32 位进程无法访问 64 位进程的模块
  • @krillezzz 您需要将项目的属性更改为针对 x64 平台
  • 找不到该选项。使用VS 2012。在项目属性中-> 我只能找到目标框架(不是平台目标)。在构建的配置管理器下,我可以找到活动解决方案平台(设置为“混合平台”)
  • 我也在使用 VS 2012。在项目属性中,旁边有一堆选项卡,其中一个是“构建”,单击它。然后,您应该会看到一个“常规”标题,其中包含几个复选框、一个文本框和一个组合框。组合框应该有 3 个选项:“任何 CPU”、“x86”和“x64”。点击“x64”并保存。
  • x64 不是一个选项。现在它只是设置为活动平台
【解决方案2】:

尝试从 Unity 中启动 Visual Studio 时出现此错误。我需要先重新启动计算机才能完成 Visual Studio 安装。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-06
    • 2021-07-20
    • 1970-01-01
    • 1970-01-01
    • 2020-03-28
    • 1970-01-01
    • 2011-06-13
    相关资源
    最近更新 更多