我读过很多文章。但据我所知,我已经完成了所有工作。 在本地计算机VS2010上一切正常。只有在IIS7服务器上工作时才会出现此问题。
如果我从Windows资源管理器手动启动它,我想启动一个在服务器上运行良好的exe文件。
Dim fiExe As New IO.FileInfo(IO.Path.Combine(diBase.FullName, "ClientBin\ConvertAudio.exe"))
Dim SI As New ProcessStartInfo(fiExe.FullName, args)
SI.Verb = "runas"
SI.UseShellExecute = True
SI.WorkingDirectory = fiExe.Directory.FullName
Dim P As Process = Process.Start(SI)
P.PriorityClass = ProcessPriorityClass.Idle
我已经在IIS中的应用程序中转换了目录ClientBin
。
但是当使用该服务时,我收到此错误(Silverlight应用程序中的回调):
{System.Security.SecurityException ---> System.Security.SecurityException: Sicherheitsfehler
bei System.Net.Browser.BrowserHttpWebRequest.InternalEndGetResponse(IAsyncResult asyncResult)
bei System.Net.Browser.BrowserHttpWebRequest.<>c__DisplayClass5.<EndGetResponse>b__4(Object sendState)
bei System.Net.Browser.AsyncHelper.<>c__DisplayClass4.<BeginOnUI>b__0(Object sendState)
--- Ende der internen Ausnahmestapelüberwachung ---
bei System.Net.Browser.AsyncHelper.BeginOnUI(SendOrPostCallback beginMethod, Object state)
bei System.Net.Browser.BrowserHttpWebRequest.EndGetResponse(IAsyncResult asyncResult)
bei System.Net.WebClient.WebClientWriteStream.<Dispose>b__3(IAsyncResult ar)}
我试图存储文件“clientaccesspolicy.xml”
在ClientBin
<?xml version="1.0" encoding="utf-8"?>
<access-policy>
<cross-domain-access>
<policy>
<allow-from http-request-headers="*">
<domain uri="*"/>
</allow-from>
<grant-to>
<resource path="/" include-subpaths="true"/>
</grant-to>
</policy>
</cross-domain-access>
</access-policy>
仍然是同一个消息。 有什么想法吗?
*新信息 - 动词* 使用此功能时
Dim startInfo As New ProcessStartInfo(fiExe.FullName)
Dim V As String = ""
For Each verb As String In startInfo.Verbs
V &= V & ", "
Next
Throw New Exception("Verbs=" & V)
我收到了这个结果:
动词= ,,,,,,,,
*找到解决方案*
我在使用http://www.fiddler2.com和http://technet.microsoft.com/en-us/sysinternals/bb896653时找到了解决方案
问题是在x64 IIS上使用x86应用程序并结合verb=runas
标志。现在应用程序设置为anycpu(也许这无关紧要)并且ProcessStartInfo上的verb
未设置为任何内容。
答案 0 :(得分:13)
<强> 编辑: 强>
经过漫长的旅程,我和Nasenbaer找到了以下内容。 IIS运行EXE失败的可能原因是:
原始答案:
您需要在EXE所在的目录上为IIS AppPool\DefaultAppPool
用户分配FullControl安全权限。这是尝试运行该过程的用户(假设您使用的是DefaultAppPool
),如果没有适当的权限,则无法执行此操作。
手动运行EXE时,您正在使用Windows登录用户。这就是为什么你可以手工午餐。 IIS使用应用程序池用户。
要添加权限,请执行以下操作:
IIS AppPool\DefaultAppPool
FullControl
<强>截图强>:
答案 1 :(得分:5)
这对我有什么帮助: 在应用程序池中设置 Identity = LocalSystem
希望它会帮助某人......
答案 2 :(得分:-2)
var p = new Process
{
StartInfo =
{
FileName = Path,
UseShellExecute = false,
}
};
p.Start();