Bellow是我的asp.net服务代码,试图运行一些外部exe。它在win 7上从我的Visual Studio工作正常,但在我的服务器上失败(服务器2008)。 Myapp.exe报告了一个错误,即运行该帐户的帐户没有足够的权限。
List<ProcInfo> allProcesses = new List<ProcInfo>();
ProcessStartInfo pInfo = new ProcessStartInfo();
pInfo.FileName = binPath + @"\myApp.exe";
pInfo.WindowStyle = ProcessWindowStyle.Hidden;
pInfo.CreateNoWindow = true;
pInfo.UseShellExecute = false;
pInfo.RedirectStandardOutput = true;
string exitMsg = "";
int exitCode = 1;
try
{
using (Process proc = Process.Start(pInfo))
{
exitMsg = proc.StandardOutput.ReadToEnd();
proc.WaitForExit(1000);
exitCode = proc.ExitCode;
}
}
服务器上的资源池在具有足够权限的帐户下运行,我还尝试在代码中使用相同的帐户来启动具有相同凭据的服务,但仍然没有。
我被告知asp.net工作线程运行的帐户会产生一些额外的限制。因此,即使资源池在适当的帐户下运行,您仍然没有足够的权限。 我还发现了一些关于使用pInvoke和win32 api调用作为从asp.net服务运行外部代码的唯一方法。但我没有任何win32 api知识,也没有找到这个问题。
我非常感谢任何提示/示例如何在asp.net服务的指定帐户下运行外部exe。
答案 0 :(得分:1)
如果工作流程在缺少足够的privelages的情况下运行,那么您有几个选择。
您可以在代码中使用模拟:
WindowsIdentity.Impersonate Method
或者将IIS配置为在具有所需权限的用户帐户下运行应用程序。
这篇文章解释了模仿安全的不同方法:
Understanding ASP.NET Impersonation Security
如果您不自信地实现用户模拟代码,请参阅代码项目文章的链接: