首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ProcessStartInfo的C#问题

ProcessStartInfo的C#问题
EN

Stack Overflow用户
提问于 2010-10-20 17:36:03
回答 2查看 3.2K关注 0票数 1

我正在使用一个ProcessStartInfo来修补一个带有如下文本文件的文件(通过cmd.exe):

app.exe temp.txt patch.ips

我写了这段代码:

代码语言:javascript
复制
ProcessStartInfo P = new ProcessStartInfo("app.exe");  
P.Arguments = "temp.txt " + _patchpath;  
P.CreateNoWindow = true;  
P.UseShellExecute = false;  
P.RedirectStandardOutput = true;  
Process.Start(P);

app.exe和temp.txt是相对于我的应用程序路径的(注意: app.exe不是我的C#应用程序的名称,它只是我用于该进程的一个程序),但_patchpath与D:\blah\file.ips一样是一个绝对路径。问题是,如果它是绝对的,那么这个过程就不会起作用(_patchpath应该用temp.txt文件打补丁),但是如果它是相对于我的应用程序目录的,它就会起作用。为什么会这样?我该如何修复它?

如果我需要澄清,请让我知道。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-10-20 18:29:27

问题很可能是被调用的应用程序(app.exe)不理解参数。解决此问题的最好方法是在app.exe无法工作的情况下使用您提供的参数对其进行调试。尝试将app.exe调试器中的参数设置为与失败案例完全相同的参数,并检查解析参数所产生的变量。

票数 1
EN

Stack Overflow用户

发布于 2010-10-20 20:40:34

调试此类问题的常用方法是使用调试器。将此代码复制/粘贴到‘app.exe’的源文件的Main()方法中:

代码语言:javascript
复制
        System.Diagnostics.Debugger.Break();

一旦app.exe开始运行,您就会看到一个对话框,让您选择调试器。从那时起,你应该不会有太多困难来弄清楚为什么它不能工作。

如果您没有app.exe的源代码,那么您需要仔细考虑这个问题。使用"app.exe“或"temp.txt”这样的相对路径总是很麻烦。典型的失败模式是使用OpenFileDialog让用户选择_patchpath值。如果对话框RestoreDirectory属性未设置为True,则程序的默认目录将更改为修补程序文件的路径。而且app.exe和temp.txt都不能再是第四名了。

通过防御性编程来保护自己:

代码语言:javascript
复制
        var myPath = System.Reflection.Assembly.GetEntryAssembly().Location;
        var homeDir = System.IO.Path.GetDirectoryName(myPath);
        var appPath = System.IO.Path.Combine(homeDir, "app.exe");
        var tempPath = System.IO.Path.Combine(homeDir, "temp.txt");
        ProcessStartInfo P = new ProcessStartInfo(appPath);
        P.WorkingDirectory = homeDir;
        P.Arguments = string.Format("\"{0}\" \"{1}\"", tempPath, _patchpath);
        // etc...
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3976456

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档