Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net IIS7不会通过进程启动启动我的Exe文件_.net_Silverlight_Iis 7 - Fatal编程技术网

.net IIS7不会通过进程启动启动我的Exe文件

.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(

我读了很多文章。但据我所知,我已经做了所有的事。 在本地计算机VS2010上,一切正常。只有在IIS7服务器上工作时才会出现问题

我想启动一个exe文件,如果我从Windows资源管理器手动启动它,它在服务器上工作得很好

 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用户的权限,例如应用程序池用户或网络服务(在IIS6中)
  • x64计算机上运行的x86 EXE问题
  • 典型的EXE失败问题,例如缺少依赖项
  • 原始答案:

    您需要在EXE所在的目录上为
    IIS AppPool\DefaultAppPool
    用户分配FullControl安全权限。这是试图运行该进程的用户(假设您使用的是
    DefaultAppPool
    ),如果没有适当的权限,则无法运行该进程

    手动运行EXE时,您使用的是Windows登录用户。这就是为什么你可以用手工午餐的原因。IIS使用应用程序池用户

    要添加权限,只需执行以下操作:

  • 转到目录属性
  • 安全选项卡
  • 编辑..->添加
    IIS AppPool\DefaultAppPool
  • 检查
    FullControl
  • 屏幕截图

    帮助我的是: 应用程序池中的设置 标识=本地系统

  • 打开应用程序池
  • 查找您的池(默认情况下为DefaultAppPool)
  • 点击“高级设置”
  • 将标识更改为“LocalSystem”

  • 希望它能帮助某人…

    我已经像上面描述的那样做了。对不起,那不行。非常感谢你,迈克尔。听起来应该行得通。我觉得自己很愚蠢,但我不知道在哪里可以找到你所说的
    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();