我需要使用管理员帐户从ASP.NET应用程序运行一个控制台应用程序并启用桌面交互。我已经尝试过以下代码,控制台应用程序运行正常,但在NETWORK SERVICE帐户中。有关如何在管理员帐户下运行控制台的任何想法吗?
string enginePath = Server.MapPath(@"~/engine/MyConsole.exe");
System.Diagnostics.ProcessStartInfo info = new System.Diagnostics.ProcessStartInfo(enginePath, "");
System.Diagnostics.Process p = System.Diagnostics.Process.Start(info);
p.WaitForExit();
此致 托马斯
答案 0 :(得分:0)
你可以使用模拟,有一个例子here
个人我不喜欢在asp.net中模仿,你需要处理密码要么不被更改,要么在代码中更改密码。有没有办法像asp.net用户那样运行你想要的东西?编辑:
您可以通过使用“NETWORK SERVICE”作为用户名来虚拟模拟网络服务,这至少可以解决密码问题,
答案 1 :(得分:0)
您可以使用清单文件并将其构建到控制台应用程序中,该文件将指示它始终在管理员帐户下运行。请参阅此example。
如果这对您不起作用,那么您可以尝试在ProcessStartInfo属性中传入管理员帐户凭据,例如
string enginePath = Server.MapPath(@"~/engine/MyConsole.exe");
System.Diagnostics.ProcessStartInfo info = new System.Diagnostics.ProcessStartInfo(enginePath, "");
info.UserName = "Administrator";
info.Password = "Password";
System.Diagnostics.Process p = System.Diagnostics.Process.Start(info); p.WaitForExit();
答案 2 :(得分:0)
另一位用户已建议假冒。如果那还不错,你去吧。但就像他说的那样,有一些维护难题需要处理,并且会带来一些安全隐患。
我过去使用的一些选项可能适用于您的情况,也可能不适用:
如果任务是在可预测的时间表上,只需将其添加到Windows中的计划任务中,设置适当的工作人员帐户(管理员或其他),然后再去。我相信还有一些方法可以以编程方式触发计划任务,但我从来没有这样做过。谷歌搜索应该让你去。
将控制台应用程序逻辑实现为在相应帐户下运行的服务。然后让服务从您的网络应用程序中侦听“触发器” - 文件丢弃或更简单的事情。
无论哪种方式,我们的想法是避免在您的ASP页面中存储任何信用卡,并且不必授予它不需要的进程权限。