【问题标题】:process.start() hangs when called from VS Addin从 VS Addin 调用 process.start() 时挂起
【发布时间】:2009-07-23 13:04:22
【问题描述】:

我正在使用 Visual Studio 2005 的插件来调用外部进程。

当我在插件之外运行代码时 - 即在独立项目中它可以正常工作。但是,当我将其作为插件的一部分调用时,会进行 Process.Start() 调用但没有任何反应,后续代码行永远不会到达。

我尝试过使用标准权限和提升权限运行 VS,但效果相同。

代码如下 - 单击自定义菜单项时调用它:

        string documentPath = @"C:\TestCode\TestApp\Testform.cs";
        string folder = Path.GetDirectoryName(@"C:\TestCode\TestApp\");

        System.Diagnostics.Process p = new System.Diagnostics.Process();
        p.StartInfo.FileName = "notepad.exe";
        p.StartInfo.Arguments = documentPath;
        p.StartInfo.UseShellExecute = true;
        p.StartInfo.RedirectStandardOutput = true;
        p.Start();

        string output = p.StandardOutput.ReadToEnd();

我尝试了不同的可执行文件,但这没有任何区别。我在VS中以错误的方式解决这个问题吗?任何帮助表示赞赏。

【问题讨论】:

  • 为什么你有'文件夹'当你甚至不使用它的时候?你试过调试吗?
  • 在我清理了“真实”代码以便在此处发布后,我错误地将其留在了此处
  • 仅供参考,当调试到它时,它到达了 process.start 然后什么也没做,它只是挂起......

标签: c# process visual-studio-addins


【解决方案1】:

您是否尝试过尝试/捕捉?特别是有一些与带有 VS 扩展的工作路径/当前目录相关的问题(但我希望记事本至少可以工作)。

我也不确定您希望该代码做什么(在重定向 notepad.exe 的标准输出方面);你能澄清一下吗?

目前不是问题,但请注意,当使用路径作为参数时,您需要从头开始添加引号 - 即

p.StartInfo.Arguments = "\"" + documentPath + "\"";

(如果路径中有空格)

【讨论】:

  • 噢!我想我在我遇到的所有各种问题之间都混杂在一起,并且没有将 UseShellExecute 设置为 false ,这是重定向输出所必需的。将此设置为 false 修复它并开始该过程。我接受这个答案是因为在它周围放置一个 try/catch 可以帮助我发现错误。我错误地认为如果引发了异常,那么它将显示在 IDE 中,但在调试插件时似乎没有......
  • 当一切都失败了...异常处理;-p
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-07
  • 1970-01-01
  • 2022-11-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多