Estoy tratando de crear un administrador para mi que se inicia automáticamente. Debería leer un archivo XML y, a continuación, inicie mis programas con un delay personalizado. Por ejemplo:

<startup id="0">
    <name>Realtek Audio Manager</name>
    <process arguments="-s">C:\Program Files\Realtek\Audio\HDA\RtkNGUI64.exe</process>
    <delay>5</delay>
</startup>

Este se ejecuta el proceso especificado (C:\Program Files\...\RtkNGUI64.exe -s) después de 5 segundos.

Ahora, tres de los programas no arranca, me da un System.ComponentModel.Win32Exception: «Das kann die angegebene Datei nicht finden.» («El sistema no era capaz de encontrar el archivo especificado.»)

Pero el XML se analiza correctamente, y el archivo que desee para comenzar es en la ubicación que se especifica en el archivo XML.

El problema sólo se refiere a estos tres archivos:
Intel HotkeysCmd – C:\Windows\System32\hkcmd.exe
Intel GFX en la Bandeja de C:\Windows\System32\igfxtray.exe
Intel Persistencia – C:\Windows\System32\igfxpers.exe

Creo que el problema viene de la ubicación de los archivos: todos ellos se encuentran en C:\Windows\System32 y todos los otros programas de trabajo se encuentran fuera (C:\Program Archivos, C:\Program Files (x86), D:\Program Archivos, %AppData%)

¿Tengo que dar mi programa de algún tipo de derechos de acceso a los programas de inicio en C:\Windows\System32? ¿Cómo puedo hacer eso?

Si no, ¿cuál podría ser la razón por la que obtener los errores con estos programas?

EDITAR – mi código:

delegate(object o)
{
    var s = (Startup) o;
    var p = new System.Diagnostics.Process
                {
                    StartInfo =
                        new System.Diagnostics.ProcessStartInfo(s.Process, s.Arguments)
                };
    try
    {
        s.Process = @"C:\Windows\System32\igfxtray.exe"; //For debugging purposes
        System.Diagnostics.Process.Start(s.Process);
        icon.ShowBalloonTip(2000, "StartupManager",
                            "\"" + s.Name + "\" has been started.",
                            System.Windows.Forms.ToolTipIcon.Info);
    }
    catch (System.ComponentModel.Win32Exception)
    {
        icon.ShowBalloonTip(2000, "StartupManager",
                            "\"" + s.Name + "\" could not be found.",
                            System.Windows.Forms.ToolTipIcon.Error);
    }
}
Has probado a hacer simplemente: Sistema.Los diagnósticos.Proceso.Inicio(@»C:\Windows\System32\igfxtray.exe»); he intentado que (yo he igfxtray en mi máquina) y no tuve ningún error.
La línea utilizada funciona para mí también, pero cuando yo uso una variable (System.Diagnostics.Process.Start(s.Process)) (donde s es una struct Startup que contiene string Process), simplemente no se inicia, aunque s.Process == "C:\\Windows\\System32\\igfxtray.exe".
Por favor enviar el código

OriginalEl autor pascalhein | 2012-12-20

1 Comentario

  1. 17

    Claramente que usted está utilizando una versión de 64 bits de Windows. El c:\windows\system32 y c:\program los archivos de los directorios están sujetos a una función llamada «sistema de archivo de redirección». Es un appcompat función, ayuda a garantizar que los procesos de 32 bits no intente usar 64 bits ejecutables. Van a llegar a redirigido a c:\windows\syswow64 y c:\program files (x86).

    Así que cuando intenta iniciar un archivo en c:\program files\realtek\etcétera, el programa de 32 bits va a ser redirigido a c:\program files (x86)\realtek\etcétera. Un directorio que no existe, kaboom. Mismo ingrediente activo de igfxtray.exe

    Usted necesitará cambiar su programa de la plataforma de destino por lo que se puede ejecutar como un nativo de 64-bits del proceso y evitar el problema de redirección que tienen ahora. Proyecto + Propiedades, pestaña Generar, cambiar la «Plataforma de destino» para AnyCPU.

    OriginalEl autor Hans Passant

Dejar respuesta

Please enter your comment!
Please enter your name here