IIS7 не запускает мой файл Exe с помощью Process Start

Я читал много статей. Но насколько я знаю, я сделал все. На локальном компьютере 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

Я преобразовал каталог 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 не настроено ни на что.

Ответ 1

Edit:

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

  • Отсутствие разрешений для пользователей IIS, таких как пользователь пула приложений, или служба сети (в IIS6).
  • x86 EXE работает на проблемах с процессором x64.
  • Типичные проблемы с ошибкой EXE, такие как отсутствующие зависимости.

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

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

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

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

  • Перейти к свойствам каталога
  • вкладка "Безопасность"
  • Изменить.. → Добавить IIS AppPool\DefaultAppPool
  • Проверьте его FullControl

Скриншот

enter image description hereenter image description here

Ответ 2

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

  • Открыть пулы приложений
  • Найдите свой пул (по умолчанию DefaultAppPool)
  • Нажмите "Дополнительные настройки"
  • Изменить идентификатор на "LocalSystem"

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

Ответ 3

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