我需要从MVC控制器在服务器上运行可执行文件.问题:可执行文件位于Program Files文件夹中,并且还将从注册表中读取值.我已将相应文件夹的执行权限授予我的应用程序池.所以这是我的问题:
只运行exe Process.Start(exe)将启动可执行文件,然后由于无法读取注册表值(无访问权限)而退出并出现错误.
将本地管理员用户分配为ProcessStartInfo失败:
var exe = @"C:\Program Files (x86)\[path to exe]";
var secString = new SecureString();
secString.AppendChar('character');
//...
secString.MakeReadOnly();
var procInfo = new ProcessStartInfo(exe, settingsPath)
{
UseShellExecute = false,
UserName = "[username]",
Domain = "[domain]",
Password = secString,
RedirectStandardError = true,
RedirectStandardOutput = true,
RedirectStandardInput = true,
Verb = "runas"
};
var proc = Process.Start(procInfo);
proc.WaitForExit();
Run Code Online (Sandbox Code Playgroud)
这将导致conhost和可执行文件崩溃.
使用这样的模拟:
var impers = new ImpersonationService();
impers.PerformImpersonatedTask("[user]", "[domain]", "[password]",
ImpersonationService.LOGON32_LOGON_INTERACTIVE, ImpersonationService.LOGON32_PROVIDER_DEFAULT, new Action(RunClient));
Run Code Online (Sandbox Code Playgroud)
...用RunClient()简单的方法使用Process.Start(exe)将绝对没有!运行该方法但该过程未启动.我知道该方法是运行的,因为我添加了这一行: …