2011-12-07 19 views
10

Ho letto molti articoli. Ma per quanto ne so ho fatto tutto. Sul computer locale VS2010 funziona tutto bene. Il problema si verifica solo quando si lavora su IIS7 Server.IIS7 non avvia il file Exe all'avvio del processo

Voglio iniziare un file exe che funziona perfettamente sul server se lo avvio manualmente da Windows Explorer.

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 

ho convertito la directory ClientBin in un'applicazione in IIS.

Ma quando si utilizza il servizio che ricevo questo errore (richiamata in un'applicazione 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)} 

Ho cercato di memorizzare il file "clientaccesspolicy.xml" nella stessa directory come 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> 

Ancora lo stesso messaggio. Qualche idea?

ISS7 Commandline configuration

permission in Windows Explorer

* nuove info - verbo * Quando si utilizza questa funzione

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) 

ricevo questo risultato:

Verbi =,,, ,,,,

* soluzione trovata * ho trovato la soluzione, mentre usando http://www.fiddler2.com e http://technet.microsoft.com/en-us/sysinternals/bb896653 Il problema era che durante l'utilizzo di applicazioni x86 su un x64 IIS in combinazione con verb=runas bandiera. Ora l'applicazione è impostata su anycpu (Forse non importa) e verb su ProcessStartInfo non è impostata su nulla.

risposta

13

Edit:

Dopo un lungo viaggio, io e Nasenbaer state trovate le seguenti. Le possibili ragioni per IIS a fallire eseguire un EXE sono:

  1. Mancanza di autorizzazioni per gli utenti di IIS, come ad esempio l'utente pool di applicazioni, o il servizio di rete (in IIS6).
  2. x86 EXE in esecuzione su problemi di macchina x64.
  3. Problemi tipici di errore EXE come dipendenze mancanti.

risposta originale:.

È necessario assegnare le autorizzazioni di protezione FullControl per l'utente IIS AppPool\DefaultAppPool, sulla directory del file EXE si trova in questa è l'utente che sta cercando di eseguire il processo (supponendo che si stia utilizzando lo DefaultAppPool) e senza le autorizzazioni appropriate, non è in grado di farlo.

Quando si esegue manualmente l'EXE, si utilizza l'utente connesso di Windows. Questo è il motivo per cui sei in grado di pranzare in modo manuale. IIS utilizza l'utente Pool di applicazioni.

per aggiungere le autorizzazioni solo effettuare le seguenti operazioni:

  1. Vai alla proprietà della directory scheda
  2. Security
  3. Edit .. -> Aggiungi il IIS AppPool\DefaultAppPool
  4. Controllare che la FullControl

Schermata:

enter image description here enter image description here

+0

Grazie un sacco di Michaels. Sembra che dovrebbe funzionare. Mi sento stupido ma non so dove trovare la bandiera 'FullControl' di cui stai parlando. Ho aggiunto un'immagine. Per favore, puoi provare a fornirmi alcuni dettagli dei menu per trovare il 'FullControl'? – Nasenbaer

+0

@Nasenbaer: passare alla cartella corrente in Esplora risorse, non in Gestione IIS. Fammi sapere se hai bisogno di uno screenshot. – MichaelS

+0

Ciao Michael. Grazie ancora. Prima di postare qui in StackOverflow ho già controllato questo problema. Ma poiché ho visto tutto per "Accesso completo" su IIS User, non ho potuto rilevare il problema. Per favore, sì, puoi fornirmi il menu in Windows Explorer (l'inglese dovrebbe andare bene) per lavorare? Ho aggiunto una nuova foto per mostrare dove ho guardato. – Nasenbaer

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

Che ho già fatto come descritto. Scusa ma non funziona. – Nasenbaer

6

Ciò che mi ha aiutato è questa: impostazione nel pool di applicazioni identità = LocalSystem

  1. di Open Pool di applicazioni
  2. Trova la tua piscina (da predefinito DefaultAppPool)
  3. Cliccare su "Impostazioni avanzate"
  4. cambio d'identità a "LocalSystem"

Speriamo che aiutare qualcuno ...

+0

Dovrebbe funzionare, ma non è un approccio sicuro alla sicurezza. –

+0

Questa era la mia soluzione. Grazie! –

Problemi correlati