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>
все то же сообщение. Есть идеи?
* новая информация - глагол * При использовании этой функции
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:
- отсутствие разрешений для пользователей IIS, таких как пользователь пула приложений или сетевая служба (в IIS6).
- x86 EXE работает на проблемах x64 машины.
- типичные проблемы сбоя EXE, такие как отсутствует зависимости.
оригинальный ответ:
вам нужно назначить разрешения безопасности FullControl для IIS AppPool\DefaultAppPool
пользователь, в каталоге, в котором находится EXE. Это пользователь, который пытается запустить процесс (предполагая, что вы используете DefaultAppPool
), и без надлежащего разрешения, он не может этого сделать.
при запуске EXE вручную, вы используете Windows, вошедшего в систему пользователя. Вот почему вы можете обедать в ручную. IIS использует пользователя пула приложений.
добавить разрешения просто сделайте следующее:
- перейти к свойствам каталога
- вкладка Безопасность
- правка.. -> Добавить
IIS AppPool\DefaultAppPool
- Проверьте для него
FullControl
скриншоты:
Что помогло мне это: Настройка в пуле приложений Identity = LocalSystem
- Открыть Пулы Приложений
- найдите свой пул (по умолчанию DefaultAppPool)
- нажмите "Дополнительные настройки"
- изменить идентификатор на "LocalSystem"
надеюсь, это поможет кто-то...