2010-11-19 15 views
7

Estoy tratando de ejecutar un problema externo desde C# utilizando Process.Start, pero me estoy encontrando con problemas de permisos. Cuando abro un símbolo del sistema normalmente (no como un administrador) y ejecuto mis comandos, funcionan bien, pero cuando abro un símbolo del sistema mediante Process.Start, aparece un error de escritura en el directorio. ("No puedo escribir en el archivo test.log")
Si lo ejecuto como administrador a través de Process.Start funciona bien, pero obtengo los permisos emergentes. ¿Alguien tiene alguna idea que pueda ayudarme a resolver esto? ¡Gracias!Process.Start Permisos Problema

Aquí está el código que estoy usando:

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

¿Por qué necesita ajustar su programa a través de cmd.exe? –

Respuesta

7

Me pregunto si está tratando de escribir un registro de diagnóstico para el directorio de trabajo actual, que puede que no tenga permisos para. (No sé de antemano si heredará el directorio de trabajo, o será el directorio que contiene cmd.exe.) Le sugiero que especifique el directorio de trabajo para el nuevo proceso usando ProcessStartInfo.WorkingDirectory.

(Por un lado, personalmente creo que es más limpio crear un nuevo ProcessStartInfo y poblar que - los inicializadores de objetos C# lo hacen particularmente agradable) y luego llamar al Process.Start(ProcessStartInfo) para iniciarlo. De lo contrario, parece que ya hay un proceso cuando todavía no hay uno. Solo MHO, sin embargo, y sin relación con el problema que está investigando, probablemente)

+0

¡Impresionante! No me di cuenta de que el directorio de trabajo podría ser diferente al iniciarlo de esta manera. Cambié el directorio de trabajo al que tenía mi archivo tex y funcionó. ¡Gracias! –

1

En lugar de usar cmd.exe como una propiedad FileName del objeto Process, mantenga sus comandos en un archivo por lotes y luego use ese archivo para su ejecución.

También puede mencionar los privilegios del administrador como nombre de usuario, contraseña, dominio, etc. a través de la propiedad StartInfo de la clase Process. Si usa estas propiedades, creo que el problema de permiso no vendrá. Here puede encontrar más información sobre la propiedad StartInfo.

Espero que ayude.

Cuestiones relacionadas