5

我需要使用管理员帐户从 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();

问候,托马斯

4

3 回答 3

0

你可以使用模拟,这里有一个例子

就我个人而言,我不喜欢在 asp.net 中进行模拟,您需要处理不更改密码或在代码中更改密码。有没有办法以 asp.net 用户的身份运行你想要的东西?

编辑:

您可以通过使用“NETWORK SERVICE”作为用户名来模拟网络服务,这至少可以稍微减轻密码问题,

于 2009-12-09T13:17:38.360 回答
0

您可以使用清单文件并将其构建到您的控制台应用程序中,该应用程序将指示它始终在管理员帐户下运行。请参阅此示例

如果这对您不起作用,那么您可以尝试在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(); 
于 2009-12-09T13:22:17.917 回答
0

另一个用户已经建议冒充。如果这足够好,那就去吧。不过,就像他说的那样,需要处理一些维护难题和一些安全隐患。

我过去使用的一些选项可能适用于您的情况,也可能不适用于您的情况:

  1. 如果任务在可预测的计划中,只需将其添加到 Windows 中的计划任务中,设置适当的工作人员帐户(管理员或其他),然后放手。我相信还有一些方法可以以编程方式触发计划任务,但我从来没有这样做过。谷歌搜索应该让你继续前进。

  2. 将控制台应用程序逻辑实现为在适当帐户下运行的服务。然后让服务从您的网络应用程序中侦听“触发器”——文件删除或更简单的东西。

无论哪种方式,想法都是避免在您的 ASP 页面中存储任何凭据,并且不必授予它不需要的进程权限。

于 2009-12-09T13:27:43.993 回答