2017-05-30 4 views
1

Je ne suis pas en mesure de lancer le programme narrateur à partir de Visual Studio à l'aide de C#. J'ai essayé d'utiliser le chemin complet et d'autres hacks similaires mais aucun résultat? Le code est:Impossible de lancer le narrateur à partir de Visual Studio

System.Diagnostics.Process.Start(@"C:\windows\system32\narrator.exe"); 

code similaire est en mesure d'exécuter notepad.exe présente dans le même dossier. Quelqu'un peut-il m'aider à cet égard? Le Execption que je suis arrivé était ::

« Une exception non gérée du type « System.ComponentModel.Win32Exception » a eu lieu dans System.dll Informations complémentaires: Le système ne peut pas trouver le fichier spécifié »

mais le fichier existe dans le chemin spécifié. Ensuite, j'ai copié l'intégralité du dossier system32 sur mon bureau et donné le nouvel emplacement. Le code passe alors sans aucune exception mais aucune application narratrice n'est lancée.

+0

Veuillez publier une exception ou une sortie quelconque. – Szer

+0

@Szer posté l'exception – sumit

+0

Il est assez évident message d'erreur. Est-ce qu'il existe "C: \ windows \ system32 \ narrator.exe"? – Szer

Répondre

0

Vous pouvez désactiver la redirection du système de fichiers à l'aide de certains appels système. Notez que même avec la redirection fixée, vous ne pouvez toujours pas lancer Narrator sans privilèges élevés.

const int ERROR_CANCELLED = 1223; //The operation was canceled by the user. 

var oldValue = IntPtr.Zero; 
Process p = null; 

try 
{ 
    if (SafeNativeMethods.Wow64DisableWow64FsRedirection(ref oldValue)) 
    { 
     var pinfo = new ProcessStartInfo(@"C:\Windows\System32\Narrator.exe") 
     { 
      CreateNoWindow = true, 
      UseShellExecute = true, 
      Verb = "runas" 
     }; 

     p = Process.Start(pinfo); 
    } 

    // Do stuff. 

    p.Close(); 

} 
catch (Win32Exception ex) 
{ 
    // User canceled the UAC dialog. 
    if (ex.NativeErrorCode != ERROR_CANCELLED) 
     throw; 
} 
finally 
{ 
    SafeNativeMethods.Wow64RevertWow64FsRedirection(oldValue); 
} 


[System.Security.SuppressUnmanagedCodeSecurity] 
internal static class SafeNativeMethods 
{ 
    [DllImport("kernel32.dll", SetLastError = true)] 
    public static extern bool Wow64DisableWow64FsRedirection(ref IntPtr ptr); 

    [DllImport("kernel32.dll", SetLastError = true)] 
    public static extern bool Wow64RevertWow64FsRedirection(IntPtr ptr); 

}