【问题标题】:Trouble launching program with System.Diagnostics.Process.Start()使用 System.Diagnostics.Process.Start() 启动程序时出现问题
【发布时间】:2010-08-11 21:28:06
【问题描述】:

应该是琐碎的事情现在已经占用了我一个小时的时间! >__

我想以 xml 路径作为参数启动一个可执行文件。 (我已将该程序所在的目录添加到我的系统路径中。)看起来很简单。我的第一种方法是使用静态 Process.Start() 方法:

Process.Start(@"MyExecutable.exe", "C:\\My Doc\\SomeDirectory\\MyXMLPath.xml");

这个过程确实开始了,但在半秒后它就死了。所以,我喜欢 ooookaay,也许可执行文件不喜欢我给它的论点?只是为了咯咯笑,我创建了一个可执行文件的快捷方式,并将 xml 文件路径添加为它的参数之一。程序按预期启动和运行。不知道为什么会这样,我决定在命令行上测试一下我的运气:

C:\MyExecutable.exe "C:\My Docs\SomeDirectory\MyXMLPath.xml"

这样开始也没问题。

现在,此时我开始抓住稻草并决定创建 Process 类的实例:

进程 proc = new Process(); proc.StartInfo.FileName = @"MyExecutable.exe"; proc.StartInfo.Arguments = "C:\\My Docs\\SomeDirectory\\MyXMLPath.xml"; proc.Start();

不用说这根本没有帮助。 >.

如此沮丧,我决定测试我的运气评论一行:

//proc.StartInfo.Arguments = "C:\\My Docs\\SomeDirectory\\MyXMLPath.xml";

然后这个过程开始了。没有必要的论据,但它开始了。所以,问题是,当我尝试通过 Process 类启动它时,为什么程序不接受我给它的路径?要是它在程序终止时给我留下了一条消息就好了。 :(

有什么想法吗?非常感激!

【问题讨论】:

  • 在黑暗中随机拍摄:在命令行中,您指定了C:\MyExecutable.exe,但在您的代码中,您只指定了MyExecutable.exe。您是否尝试过在代码中指定 C:\MyExecutable.exe?根据当前目录,可能会选择不同的 .exe。
  • @Chris - 啊,不,因为可执行文件不位于 C 的根目录中......我不应该选择不同的可执行文件。我可能有一个非常非常渺茫的机会。但我不认为这会有所作为。 :(

标签: c# .net


【解决方案1】:

问题可能是因为文件路径中的空格。如果您考虑如何进行 DOS 调用,则必须在路径周围加上引号。但你打电话给你的方式不是。所以尝试在路径周围添加单引号。那应该照顾它。如果您从如何将其呈现为命令行的角度来考虑它,那么您为什么需要这样做就更有意义了。

Process proc = new Process();
proc.StartInfo.FileName = @"MyExecutable.exe";
proc.StartInfo.Arguments = "\"C:\\My Docs\\SomeDirectory\\MyXMLPath.xml\"";
proc.Start();

【讨论】:

  • 打败我。在我想到这一点之前,我不得不看了好几遍。 +1 给你。
  • 是的,参数字符串中缺少额外的引号也可能导致它。
  • 不幸的是,添加单引号对我没有帮助:(
  • 我不确定单引号是否有效。您可以尝试将引号加倍以使用双引号吗?
  • 我没有注意到你的更新。 :) 但是代码的更新版本解决了这个问题。 :D 我想既然这是第一个正确答案,我会这样标记它。 :D 谢谢大家!
【解决方案2】:

您的参数包含一个空格:

proc.StartInfo.Arguments = "C:\\My Docs\\SomeDirectory\\MyXMLPath.xml";

这意味着您正在执行的程序正在接收以下参数:

  • C:\My
  • Docs\SomeDirectory\MyXMLPath.xml

您需要做的是用 引号(而不是另一个答案中建议的单引号),因此:

proc.StartInfo.Arguments = "\"C:\\My Docs\\SomeDirectory\\MyXMLPath.xml\"";

这意味着您正在执行的程序现在将只接收一个参数:

  • "C:\My Docs\SomeDirectory\MyXMLPath.xml"

【讨论】:

  • 耶...我可以欺负英雄。 :D 做到了。 :)
【解决方案3】:

您应该为进程的Exited 事件添加一个处理程序:

        Process p = new Process();
        p.Exited += new EventHandler(MyProcess_Exited);

然后检查处理程序中的ExitCode

    private void MyProcess_Exited(object sender, EventArgs e)
    {
        Process p = sender as Process;

        if (p.ExitCode == someValue)......
    }

在没有任何其他信息的情况下,我会说已启动进程的权限不足以读取或访问 xml 文件。

【讨论】:

  • 啊,谢谢...我不敢相信我什至没有考虑过尝试。 :)
  • 好吧...好吧,我认为 -532459699 的退出代码肯定告诉我正在发生一些奇怪的事情。 :s
猜你喜欢
  • 1970-01-01
  • 2010-11-28
  • 1970-01-01
  • 2021-07-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-17
  • 2019-03-18
相关资源
最近更新 更多