.net IIS7不会通过进程启动启动我的Exe文件
我读了很多文章。但据我所知,我已经做了所有的事。 在本地计算机VS2010上,一切正常。只有在IIS7服务器上工作时才会出现问题 我想启动一个exe文件,如果我从Windows资源管理器手动启动它,它在服务器上工作得很好.net IIS7不会通过进程启动启动我的Exe文件,.net,silverlight,iis-7,.net,Silverlight,Iis 7,我读了很多文章。但据我所知,我已经做了所有的事。 在本地计算机VS2010上,一切正常。只有在IIS7服务器上工作时才会出现问题 我想启动一个exe文件,如果我从Windows资源管理器手动启动它,它在服务器上工作得很好 Dim fiExe As New IO.FileInfo(IO.Path.Combine(diBase.FullName, "ClientBin\ConvertAudio.exe")) Dim SI As New ProcessStartInfo(
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应用程序中的回调):
还是一样的信息。
有什么想法吗
***新信息动词***
使用此功能时
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)
我收到这个结果:
动词=
***解决方案***
我在使用和时找到了解决方案
问题是在x64 IIS上使用x86应用程序与verb=runas
标志组合时出现的。现在,应用程序被设置为anycpu(也许这无关紧要),进程StartInfo上的动词
没有设置为任何内容。编辑:
经过漫长的旅途,我发现了以下几点。
IIS无法运行EXE的可能原因有:
IIS AppPool\DefaultAppPool
用户分配FullControl安全权限。这是试图运行该进程的用户(假设您使用的是DefaultAppPool
),如果没有适当的权限,则无法运行该进程
手动运行EXE时,您使用的是Windows登录用户。这就是为什么你可以用手工午餐的原因。IIS使用应用程序池用户
要添加权限,只需执行以下操作:
IIS AppPool\DefaultAppPool
FullControl
希望它能帮助某人…我已经像上面描述的那样做了。对不起,那不行。非常感谢你,迈克尔。听起来应该行得通。我觉得自己很愚蠢,但我不知道在哪里可以找到你所说的
FullControl
标志。我添加了一个图像。请尝试向我提供一些菜单的详细信息,以查找FullControl
?@Nasenbaer:转到资源管理器中的实际文件夹,而不是IIS管理器中的文件夹。如果你需要截图,请告诉我。嗨,迈克尔。再次感谢。在我在Stackoverflow发布之前,我已经检查了这个问题。但是因为我看到了IIS用户的完全访问
,所以我没有发现这个问题。请,是的,你能给我提供Windows资源管理器中的菜单(英语应该可以)来工作吗?我添加了一张新图片来显示我查看的位置。@Nasenbaer:我添加了屏幕截图,看起来你在正确的位置。验证应用程序池用户(通常称为DefaultAppPool)是否在SERVER-IIS\Users角色内。您好。谢谢你的截图。正如你在我的文章中看到的,我已经添加了“Everyone=Vollzugriff(完全控制)”作为IIS。幸运的是,我没有可以选择的“DefaultAppPool”。我不能像你那样做。您使用什么IIS?它应该可以工作,但它不是Sequerity安全的方法。这是我的解决方案。谢谢谢谢!我花了很长时间,终于找到了一个有效的解决方案。
<?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)
var p = new Process
{
StartInfo =
{
FileName = Path,
UseShellExecute = false,
}
};
p.Start();