Estoy tratando de ejecutar un proceso, como un usuario que tenga privilegios de Administrador en 2 diferentes equipos que ejecutan Vista y sus UAC activado, pero en uno de ellos tengo un Win32Exception que dice «El nombre del directorio no es válido»

¿Alguien puede decirme lo que está mal con 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 se ha requireAdministrator el nivel de ejecución.
Puse la carpeta de trabajo a «Ruta de acceso.GetDirectoryName(myFile)» y «Nuevo Sistema.IO.FileInfo(myFile).DirectoryName»

En qué línea de código hace que el error se producen? Es cuando se crea el objeto FileInfo o cuando se inicia el proceso?
Sistema.Los diagnósticos.Proceso.Inicio(pInfo)
Puede utilizar el Monitor de Procesos (de Sysinternals) para determinar qué Win32 subyacente de archivo/carpeta de la operación está fallando.
Por cierto, puede utilizar un literal de cadena para evitar tener que escapar de las barras en las rutas, por ejemplo, var myFile = @"D:\SomeFolder\MyExecutable.exe";.
Si su SomeFolder ruta de acceso contiene Archivos de Programa (x86) carpeta de Visual studio o alguna otra herramienta de místicamente quita un espacio entre » s » y » («y «Archivos de Programa(x86)». Tal vez te perdiste de este error tipográfico

OriginalEl autor mrtaikandi | 2009-06-13

6 Comentarios

  1. 13

    Necesita especificar el WorkingDirectory propiedad de ProcessStartInfo`. De Win32Exception código de error 267 «El nombre del directorio no es válido»:

    Actualmente estoy trabajando en una «Ejecución Automatizada Como» herramienta. Su objetivo es
    ayudar a los administradores que, como yo, han de dar a los usuarios un medio para ejecutar
    uno o dos programas como Administrador y me gustaría hacerlo sin
    tener que entregar una contraseña del administrador.

    Por lo tanto, estoy en vías de desarrollo en la Vista y acabo de batida hasta una pequeña prueba de
    prototipo de concepto, que había calc.exe como un usuario diferente, utilizando
    ProcessStartInfo y Proceso. Esto funcionó bien cuando me ejecutado como
    yo (bastante inútil ejercicio, debo admitirlo), pero cuando he creado
    un usuario nuevo y trató de correr como él, me topé con un
    Win32Exception quejándose de que el nombre del directorio no es válido, nativo
    código de error 267. Yo estaba instsantly desconcertado, como yo sabía que no suministrado
    nombre del directorio que podría no ser válida. Luego he probado el código en un XP
    máquina y funcionó!

    Empecé a googlear sobre él fue en vano, muchos de los reportes de que el error pero
    no concluyente solución, o en diferentes contextos. Finalmente, después de un
    mientras que caí en la cuenta de mí, yo no era especificando la WorkingDirectory
    propiedad de la clase ProcessStartInfo, tan pronto como he añadido las líneas

    FileInfo fileInfo = new FileInfo(camino); startInfo.WorkingDirectory =
    fileInfo.DirectoryName;

    A mi código, se permite la ejecución de código diferente que se registra en
    usuario. …

    OriginalEl autor Chandler

  2. 3

    Intentar sustituir

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

    con

    pInfo.WorkingDirectory = Path.GetDirectoryName(myFile);

    La FileInfo realiza un acceso al sistema de ficheros, y supongo que sólo el usuario administrador tiene acceso a ese directorio. Si esto no resuelve su problema, por lo menos va a hacer que tu código sea un poco más rápido…

    No resuelve el problema. Incluso me especificado una dirección estática.

    OriginalEl autor chris166

  3. 3

    Es el directorio del usuario que ha iniciado sesión asignado carpeta de inicio o por debajo de eso? De este artículo de knowledge base podría ayudar:

    «El nombre del directorio no es válido» mensaje de error al iniciar Cmd.exe o Notepad.exe mediante el uso de la característica Ejecutar como en Windows

    Actualización: por Favor, tenga en cuenta que el ser miembro de la Administradores Locales grupo y tener privilegios administrativos no son los mismos en Vista.

    Supongo que todo funciona correctamente cuando se ejecuta una aplicación en C#, como administrador. Haga clic derecho en el ejecutable, a continuación, elija Ejecutar como Administrador, o iniciar la aplicación desde un símbolo del sistema elevado (la manera más rápida de llegar es por presionar Inicio, escriba » cmd » seguido por Ctrl+Shift+Return).

    O, como alternativa, desactivar el control de cuentas por la cuenta que ejecuta el proceso.

    El Directorio es un directorio normal en un no-sistema de unidad que tiene el permiso de Control Total para el grupo de Administradores.
    La aplicación que se ejecuta el segundo proceso tiene requireAdministrator el nivel de ejecución. Para ello se va a ejecutar como administrador.
    Impresionante … muchas gracias por compartir esa información
    «…desactivar el control de cuentas por la cuenta que ejecuta ese proceso» – cuando empiezas a hacer eso, a su casi imposible volver atrás. Es como cruzar hacia el lado oscuro.

    OriginalEl autor Dirk Vollmar

  4. 2

    Es debido a que la longitud de ruta de acceso del archivo supera los 255 caracteres.

    Gracias, esto funcionó para mí también, yo tenía mi ruta de acceso completa y el nombre de archivo establecido en el atributo filename, en su lugar, su camino bajo el «Directorio de Trabajo» la propiedad, salir de la propiedad filename sólo para el ‘nombre de archivo’.

    OriginalEl autor mrtaikandi

  5. 2

    Es debido a que el espacio en el nombre de la carpeta. Una vez que me quita el espacio que comenzó a trabajar archivo, cuando llegué a este problema.

    OriginalEl autor Alto

  6. 2

    Tuve una experiencia similar y resultó ser un problema con nuestro entorno de desarrollo. Hacemos un mapa de nuestro directorio de código fuente a una unidad virtual usando el comando subst. Así que el nombre de archivo y WorkingDirectory de las propiedades de ser «W:\SomeFolder\FileName.exe»

    Cuando me codificado el nombre de archivo & WorkingDirectory para acceder a los archivos a través de mi disco (C:), me dejó de recibir el «Directorio no Válido» la excepción.

    OriginalEl autor Walt D.

Dejar respuesta

Please enter your comment!
Please enter your name here