2010-11-19 20 views
7

Sto tentando di eseguire un problema esterno da C# utilizzando Process.Start, ma sto riscontrando problemi di autorizzazione. Quando apro normalmente un prompt dei comandi (non come amministratore) ed eseguo i miei comandi funzionano bene, ma quando apro un prompt dei comandi tramite Process.Start, ottengo un errore di scrittura nella directory. ("Non riesco a scrivere sul file test.log")
Se lo eseguo come amministratore tramite Process.Start funziona correttamente, ma ottengo il popup delle autorizzazioni. Qualcuno ha qualche idea che potrebbe aiutarmi a capirlo? Grazie!Process.Start Autorizzazioni Problema

Ecco il codice che sto utilizzando:

Process proc = new Process(); 
proc.StartInfo.FileName = @"cmd.exe"; 
proc.StartInfo.Arguments = @"/k latex C:\Users\Shane\Documents\test.tex"; 
proc.Start(); 
proc.WaitForExit(); 
+1

Perché è necessario avvolgere il programma tramite cmd.exe? –

risposta

7

mi chiedo se sta cercando di scrivere un registro di diagnostica per la directory di lavoro corrente, che non si può avere autorizzazioni. Non so se erediterà la directory di lavoro o sarà la directory che contiene cmd.exe. Suggerisco di specificare la directory di lavoro per il nuovo processo utilizzando ProcessStartInfo.WorkingDirectory.

(Per inciso, personalmente trovo più pulito creare un nuovo ProcessStartInfo che - gli inizializzatori di oggetti C# lo rendono particolarmente piacevole) e quindi chiamare Process.Start(ProcessStartInfo) per avviarlo. Altrimenti sembra che ci sia già un processo quando non ce n'è ancora uno. Tuttavia, solo MHO e non correlato al problema che stai indagando.)

+0

Fantastico! Non mi sono reso conto che la directory di lavoro potrebbe essere diversa quando si avvia in questo modo. Ho cambiato la directory di lavoro in quella con il mio file tex e ha funzionato. Grazie! –

1

Invece di utilizzare cmd.exe come proprietà FileName dell'oggetto Process, mantenere i comandi in un file batch e quindi utilizzarlo per l'esecuzione.

Inoltre è possibile citare i privilegi di amministratore come nome utente, password, dominio ecc. Tramite la proprietà StartInfo della classe Process. Se usi queste proprietà, penso che il problema dei permessi non arriverà. Here è possibile trovare ulteriori informazioni sulla proprietà StartInfo.

Spero che aiuti.

Problemi correlati