IIS7 не запускает мой Exe-файл при запуске процесса - PullRequest
10 голосов
/ 07 декабря 2011

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

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

Ответы [ 3 ]

13 голосов
/ 07 декабря 2011

Редактировать:

После долгого путешествия я и Насенбаер обнаружили следующее.Возможные причины сбоя 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 here enter image description here

5 голосов
/ 22 октября 2013

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

  1. Открытые пулы приложений
  2. Найдите свой пул (по умолчанию DefaultAppPool)
  3. Нажмите «Расширенные настройки»
  4. Изменить удостоверение на "LocalSystem"

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

0 голосов
/ 07 декабря 2011
var p = new Process
{
    StartInfo =
    {
        FileName = Path,    
        UseShellExecute = false,
    }
};
p.Start();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...