7

我正在尝试使用 Process.Start 从 C# 运行外部问题,但遇到了权限问题。当我正常打开命令提示符(不是以管理员身份)并运行我的命令时,它们工作正常,但是当我通过 Process.Start 打开命令提示符时,我在目录上收到写入错误。(“我不能在文件 test.log 上写”)
如果我通过 Process.Start 以管理员身份运行它,它工作正常,但我得到了权限弹出窗口。有没有人有任何想法可以帮助我解决这个问题?谢谢!

这是我正在使用的代码:

Process proc = new Process();
proc.StartInfo.FileName = @"cmd.exe";
proc.StartInfo.Arguments = @"/k latex C:\Users\Shane\Documents\test.tex";
proc.Start();
proc.WaitForExit();
4

2 回答 2

9

我想知道它是否正在尝试将诊断日志写入您可能没有权限的当前工作目录。(我不知道它是否会继承工作目录,或者是包含 cmd.exe 的目录。)我建议您使用ProcessStartInfo.WorkingDirectory.

(顺便说一句,我个人觉得创建一个新ProcessStartInfo的填充更简洁——C# 对象初始化器使这特别好)然后调用Process.Start(ProcessStartInfo)启动它。否则,看起来好像已经有一个过程,而实际上还没有一个过程。不过只是 MHO,可能与您正在调查的问题无关。)

于 2010-11-19T07:41:26.520 回答
1

不要使用 cmd.exe 作为 Process 对象的 FileName 属性,而是将命令保存在一个批处理文件中,然后使用该文件执行。

您还可以通过 Process 类的 StartInfo 属性提及管理员的权限,如用户名、密码、域等。如果您使用这些属性,我认为不会出现权限问题。在这里您可以找到有关 StartInfo 属性的更多信息。

希望能帮助到你。

于 2010-11-19T07:47:50.657 回答