IIS7 не запускает мой Exe-файл при запуске процесса

Я прочитал много статей. Но насколько я знаю, я сделал все. На локальном компьютере VS2010 все работает отлично. Проблема возникает только при работе на сервере IIS7.

Я хочу запустить exe-файл, который отлично работает на сервере, если я запускаю его вручную из Проводника Windows.

 Dim fiExe As New IO.FileInfo(IO.Path.Combine(diBase.FullName, "ClientBinConvertAudio.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

я преобразовал каталог ClientBin в приложении в IIS.

но при использовании сервиса я получаю эту ошибку (обратный вызов в 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> 

все то же сообщение. Есть идеи?

ISS7 Commandline configuration

permission in Windows Explorer

* новая информация - глагол * При использовании этой функции

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 Проблема была при использовании приложения x86 на x64 IIS в сочетании с verb=runas флаг. Теперь приложение установлено в anycpu (возможно, это не имеет значения) и verb в ProcessStartInfo ничего не установлено.

3 ответов


Edit:

после долгого путешествия, я и Nasenbaer нашел следующее. Возможные причины сбоя IIS для запуска EXE:

  1. отсутствие разрешений для пользователей IIS, таких как пользователь пула приложений или сетевая служба (в IIS6).
  2. x86 EXE работает на проблемах x64 машины.
  3. типичные проблемы сбоя EXE, такие как отсутствует зависимости.

оригинальный ответ:

вам нужно назначить разрешения безопасности FullControl для IIS AppPool\DefaultAppPool пользователь, в каталоге, в котором находится EXE. Это пользователь, который пытается запустить процесс (предполагая, что вы используете DefaultAppPool), и без надлежащего разрешения, он не может этого сделать.

при запуске EXE вручную, вы используете Windows, вошедшего в систему пользователя. Вот почему вы можете обедать в ручную. IIS использует пользователя пула приложений.

добавить разрешения просто сделайте следующее:

  1. перейти к свойствам каталога
  2. вкладка Безопасность
  3. правка.. -> Добавить IIS AppPool\DefaultAppPool
  4. Проверьте для него FullControl

скриншоты:

enter image description hereenter image description here


Что помогло мне это: Настройка в пуле приложений Identity = LocalSystem

  1. Открыть Пулы Приложений
  2. найдите свой пул (по умолчанию DefaultAppPool)
  3. нажмите "Дополнительные настройки"
  4. изменить идентификатор на "LocalSystem"

надеюсь, это поможет кто-то...


var p = new Process
{
    StartInfo =
    {
        FileName = Path,    
        UseShellExecute = false,
    }
};
p.Start();