2009-06-13 111 views
9

Estoy tratando de ejecutar un proceso como un usuario diferente que tiene privilegios de administrador en 2 computadoras diferentes ejecutando Vista y su UAC habilitado pero en una de ellas obtengo una Win32Exception que dice "El directorio el nombre no es válido "Win32Exception: El nombre del directorio no es válido

¿Alguien puede decirme qué problema tiene mi código?

var myFile = "D:\\SomeFolder\\MyExecutable.exe"; 
var workingFolder = "D:\\SomeFolder"; 
var pInfo = new System.Diagnostics.ProcessStartInfo(); 
pInfo.FileName = myFile; 
pInfo.WorkingDirectory = workingFolder; 
pInfo.Arguments = myArgs; 
pInfo.LoadUserProfile = true; 
pInfo.UseShellExecute = false; 
pInfo.UserName = {UserAccount}; 
pInfo.Password = {SecureStringPassword}; 
pInfo.Domain = "."; 

System.Diagnostics.Process.Start(pInfo); 

ACTUALIZACIÓN

La aplicación que se ejecuta el código anterior tiene requireAdministrator nivel de ejecución. incluso establecer la carpeta de trabajo para "Path.GetDirectoryName (myFile)" y "Nueva System.IO.FileInfo (myFile) .DirectoryName"

+0

¿En qué línea de código se produce el error? ¿Es cuando creas el objeto FileInfo o cuando comienzas el proceso? –

+0

@divo System.Diagnostics.Process.Start (pInfo) – mrtaikandi

+0

Puede usar Process Monitor (desde Sysinternals) para determinar qué operación subyacente de archivo/carpeta Win32 está fallando. – Richard

Respuesta

2

Se debe a que la longitud de la ruta del archivo es superior a 255 caracteres.

+1

Gracias, esto funcionó para mí también, tenía toda la ruta y el nombre de archivo en el atributo de nombre de archivo, en su lugar, coloque su ruta en la propiedad 'Directorio de trabajo', deje la propiedad de nombre de archivo solo para 'nombre de archivo'. – Dal

3

es el directorio que ha iniciado sesión en la carpeta de inicio del usuario o mapeado debajo de eso? Que este conocimiento podría ayudar artículo de la base:

"The directory name is invalid" error message when you start Cmd.exe or Notepad.exe by using the Run as feature in Windows

Actualización: Tenga en cuenta que el ser miembro de la administradores locales grupo y que tienen privilegios administrativos no son los mismos en Vista.

Supongo que todo funciona bien cuando ejecuta su aplicación C# como administrador. Haga clic con el botón derecho en el ejecutable, luego elija Ejecutar como administrador, o inicie la aplicación desde un símbolo del sistema elevado (la manera más rápida de obtener uno es presionando Start, ingrese 'cmd' seguido por Ctrl+Shift+Return).

O, como alternativa, deshabilite el UAC para la cuenta que ejecuta ese proceso.

+0

El directorio es un directorio normal en una unidad que no es del sistema que tiene permiso de control total para el grupo de administradores. – mrtaikandi

+0

La aplicación que ejecuta el segundo proceso requiere el nivel de ejecución del administrador. Por lo tanto, se ejecutará como administrador. – mrtaikandi

+0

Impresionante ... muchas gracias por compartir esa información – JeeZ

3

tratar de sustituir

pInfo.WorkingDirectory = New System.IO.FileInfo(myFile).DirectoryName; 

con

pInfo.WorkingDirectory = Path.GetDirectoryName(myFile); 

El FileInfo hace un acceso al sistema de archivos, y yo asumiría sólo el usuario administrador tiene acceso a ese directorio. Si no resuelve su problema, al menos hará que su código sea un poco más rápido ...

+0

No resuelve el problema. Incluso especifiqué una dirección estática. – mrtaikandi

2

Se debe al espacio en el nombre de la carpeta. Una vez que eliminé el espacio, comencé a trabajar en el archivo cuando llegué a este problema.

2

Tuve una experiencia similar y resultó ser un problema con nuestro entorno de desarrollo. Mapeamos nuestro directorio de código fuente a una unidad virtual usando el comando subst. Así que las propiedades FileName y WorkingDirectory se establecieron en "W: \ SomeFolder \ FileName.exe"

Cuando codifiqué el FileName & WorkingDirectory para acceder a los archivos a través de mi disco real (C :), dejé de recibir el Excepción "Directorio Inválido".

10

Debe especificar la propiedad WorkingDirectory de ProcessStartInfo`.De Win32Exception error code 267 "The directory name is invalid":

Actualmente estoy trabajando en una herramienta "Ejecutar automatizado como". Su objetivo es ayudar a los administradores que, como yo, tienen que dar a los usuarios un medio para ejecutar uno o dos programas como administrador y les gustaría hacerlo sin teniendo que renunciar a la contraseña de un administrador.

Por lo tanto, estoy desarrollando en Vista y acabo de presentar una pequeña prueba del prototipo del concepto , que ejecutaría calc.exe como un usuario diferente, utilizando ProcessStartInfo and Process. Esto funcionó bien cuando lo ejecuté como (un ejercicio bastante inútil, debo admitir), pero cuando creé un nuevo usuario y traté de ejecutarlo como él, tropecé con un Win32Exception quejándose de que el nombre del directorio no es válido , código de error nativo 267. Estaba realmente desconcertado, ya que no conocía el nombre del directorio que podría no ser válido. ¡Luego probé el código en una máquina XP y funcionó!

Empecé a buscar en Google en vano, muchos informes de ese error pero solución no concluyente, o en diferentes contextos. Finalmente, después de un mientras se me ocurrió, no estaba especificando la propiedad WorkingDirectory de la clase ProcessStartInfo, tan pronto como he añadido las líneas

FileInfo fileinfo = new FileInfo (ruta); startInfo.WorkingDirectory = fileInfo.DirectoryName;

A mi código, se le permitió ejecutar código como diferente de lo que inició la sesión del usuario . ...

Cuestiones relacionadas