进程启动权限问题

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();

1
为什么需要通过cmd.exe来包装你的程序? - Mikael Svenson
2个回答

9
我想知道它是否试图将诊断日志写入当前工作目录,而您可能没有权限。 (我不知道它是否会继承工作目录,或者是包含cmd.exe的目录。)建议您使用ProcessStartInfo.WorkingDirectory指定新进程的工作目录。
(顺便说一下,我个人认为创建一个新的ProcessStartInfo并填充它更加清晰-C#对象初始化程序使这特别好),然后调用Process.Start(ProcessStartInfo)启动它。否则,当实际上还没有进程时看起来像已经有一个进程。只是我的个人意见,与您正在调查的问题无关,可能。)

太棒了!我没有意识到以这种方式启动时工作目录可能会不同。我将工作目录更改为我的tex文件所在的目录,然后它就可以工作了。谢谢! - Shane Fulmer

1

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

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

希望能对您有所帮助。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接