通过asp.net应用程序启用process.start需要哪些权限?
我有一个asp.net应用程序,它使用process.start调用可执行文件(Graphviz)。所有这些在我的开发环境中都能很好地工作,但是当我转到生产环境时,我无法让流程运行。以下是详细情况 我创建了这个简单的sub来显示问题通过asp.net应用程序启用process.start需要哪些权限?,asp.net,permissions,process.start,Asp.net,Permissions,Process.start,我有一个asp.net应用程序,它使用process.start调用可执行文件(Graphviz)。所有这些在我的开发环境中都能很好地工作,但是当我转到生产环境时,我无法让流程运行。以下是详细情况 我创建了这个简单的sub来显示问题 Protected Sub-Page\u Load(发送方作为对象,e作为事件参数)处理我。Load 将ProcessInfo设置为ProcessStartInfo ProcessInfo=新的ProcessStartInfo 'ProcessInfo.Domain
Protected Sub-Page\u Load(发送方作为对象,e作为事件参数)处理我。Load
将ProcessInfo设置为ProcessStartInfo
ProcessInfo=新的ProcessStartInfo
'ProcessInfo.Domain=“xxxxxxx”
ProcessInfo.UserName=“xxxxxx”
尺寸PwdString为String=“xxxxxxx”
将newPass设置为System.Security.SecureString
newPass=New System.Security.SecureString
对于PwdString中的每个c作为字符
newPass.AppendChar(c)
下一个c
ProcessInfo.Password=newPass
'ProcessInfo.FileName=“”C:\Windows\System32\Notepad.exe”“”
'ProcessInfo.FileName=“”C:\Test.bat”“”
ProcessInfo.FileName=“”C:\Program Files(x86)\Graphviz2.30\bin\dot.exe”“”
ProcessInfo.Arguments=“-Kdot-Tsvg C:\Test.dot-pC:\Test.svg”
ProcessInfo.RedirectStandardOutput=True
ProcessInfo.UseShellExecute=False
ProcessInfo.CreateNoWindow=True
作为过程的Dim过程
流程=新流程
Process.StartInfo=ProcessInfo
Process.Start()
'等待进程传回退出代码
Process.WaitForExit()
尝试
将ProcessResults设置为String=Process.StandardOutput.ReadToEnd
Output.Text=ProcessResults
特例
Output.Text=ex.ToString
结束尝试
端接头
这里有三种情况。首先,我只是在测试启动记事本。
-开发工程
-生产工作(这是我能在生产中工作的唯一情况)
其次,我创建了一个简单的批处理文件,可以在记事本中打开一个文档。(记事本c:\test.dot)
- 开发工程
- 生产不起作用
- 开发工程
- 生产不起作用
- 如果我没有添加模拟配置,而是将凭据添加到ProcessInfo对象,那么页面将再次运行,不会出现错误。不过,这一过程并未在生产中开始
- 如果我没有添加模拟或ProcessInfo凭据,那么我将得到一个错误。这是错误输出
异常详细信息:System.ComponentModel.Win32Exception:访问权限为
否认
源错误:
第36行:流程=新流程
第37行:Process.StartInfo=ProcessInfo
第38行:Process.Start()
第39行:
第40行:“等待进程传回退出代码
源文件:C:\Inetpub\vhosts\leapfrogbi.com\httpdocs\test\ProcessStart.aspx.vb行:38
堆栈跟踪:
[Win32Exception(0x80004005):访问被拒绝]
系统.诊断.流程.开始创建流程(流程startInfo startInfo)+2161
系统.诊断.过程.启动()+150
在C:\Inetpub\vhosts\leapfrogbi.com\httpdocs\Test\ProcessStart.aspx.vb中加载(对象发送方,事件参数e)测试\ProcessStart.Page\u
System.Web.UI.Control.OnLoad(EventArgs e)+91
System.Web.UI.Control.LoadRecursive()+74
System.Web.UI.Page.ProcessRequestMain(布尔includeStagesBeforeAsyncPoint,布尔includeStagesAfterAsyncPoint)+2207
我尝试了各种与安全相关的设置。当前我的应用程序池正在以本地管理员身份运行。我还尝试将所有人添加到administrators组中,以查看安全性是否是根本问题
此外,我正在使用Plesk来管理我的域。我已经广泛搜索了可能影响这种情况的任何选项,但还没有找到。同样,在生产过程中,当简单地调用启动记事本时,process start也可以工作。如果没有更详细的日志,很难缩小范围
提前感谢您提供的任何帮助。这让我抓狂。找到运行站点的池,然后查看运行的用户 如果无法执行此操作,则可以运行此代码以查看池正在运行的用户:
var user = System.Security.Principal.WindowsIdentity.GetCurrent().User;
var userName = user.Translate(typeof(System.Security.Principal.NTAccount));
然后授予该用户运行这些文件的权限
参考:我没有使用进程,使用shell,它正在成功运行
谢谢你,亚里士多德。我按照您的建议执行了操作,但应用程序池标识当前是本地管理员组的一部分。我已验证这是Security.Windowsidentity.GetCurrent.user返回的同一用户。我还明确地给了文件相同的用户权限&与请求有关,但结果相同。请记住,我可以使用管理员帐户运行应用程序,但除了第一个启动记事本的示例外,该过程实际上并没有运行。请取消上一个示例。我找到了一个用户没有权限访问的文件。批处理文件已运行。我将使用目标exe进行进一步测试并报告。更新-我能够运行目标exe。谢谢你,亚里士多德给我指出了正确的方向