2010-02-08 10 views
9

Devo essere in grado di eseguire un processo come utente diverso, e ho trovato molte risorse e diversi metodi per farlo. Il problema è che ho bisogno di eseguire un processo non-exe, ad es. un percorso con estensione html o, nel mio caso, "http://somewebserver/someApp.application".È possibile utilizzare la rappresentazione quando si avvia un processo non-exe in C#?

C'è un problema noto in cui i processi avviati non ereditano i contesti di rappresentazione dal loro launcher, e c'è anche un problema noto in cui i processi avviati con credenziali diverse devono essere file eseguibili (.exe).

Ma come posso avviare un file .application (ad esempio) come utente diverso?

(Ho provato tutti i tipi di combinazioni di P/invocando CreateProcessWithLoginW, impostando le credenziali di utente/password in ProcessStartInfo, ecc ogni faccia le stesse limitazioni cui sopra.)

risposta

3

Quando si lancia un non-exe, è in realtà solo la shell che cerca l'exe da utilizzare per il file o l'URL. C'è ancora un exe coinvolto.

Poiché la shell è già in esecuzione, non erediterà la tua rappresentazione. Puoi cercare gli exe nel registro e quindi chiamare CreateProcessWithLoginW, essenzialmente simulando ciò che la shell sta facendo per te.

Ad esempio, per aprire un file .txt, cercare "HKEY_CLASSES_ROOT \ .txt". Lì vedrai che il tipo è "txtfile". Quindi cerca "HKEY_CLASSES_ROOT \ txtfile \ shell \ open \ command" e vedrai quale file exe utilizzerà la shell, che è (normalmente) "% SystemRoot% \ system32 \ NOTEPAD.EXE% 1".

+0

Grazie, questo mi ha portato un ulteriore passo avanti, anche se sto ancora ricevendo un errore 0xc0000142 temuto ogni volta che provo ad avviare il processo con determinate credenziali, ma questo è un problema diverso. – vargonian

Problemi correlati