Question

Dans Windows, lorsqu'une invite de commande est ouverte (cmd.exe), les clés de Registre:

  

HKLM \ Software \ Microsoft \ Command Processor
  HKCU \ Software \ Microsoft \ Command Processor

sont vérifiés pour une valeur « Autorun ». Si trouvé, le fichier de commandes nommé la valeur est exécutée, fournissant des fonctionnalités comme AutoExec. Si les deux clés contiennent des valeurs AutoRun, les deux seront exploités. Impressionnant!

J'utilise Process.Start pour exécuter cmd.exe et le comportement AutoRun n'est pas survenant. Mon code actuel est:

private openShell( string folder )
{
    ProcessStartInfo startInfo = new ProcessStartInfo()
        {
            FileName = Environment.GetEnvironmentVariable( "COMSPEC" ) ?? "cmd.exe",
            Arguments = "/k cd \"" + folder + "\"",
            UseShellExecute = true
        };

    try
    {
        using ( var exeProcess = System.Diagnostics.Process.Start( startInfo ) )
        {
            exeProcess.WaitForExit();
        }
    }
    catch
    {
        // Log error.
    }
}

J'ai aussi essayé la réduire jusqu'à la forme la plus simple:

System.Diagnostics.Process.Start( "cmd.exe" );

Tout ce que je essayer fonctionne parfaitement (dans ce lancement une fenêtre de commande), mais le comportement AutoRun ne se produit jamais.

Était-ce utile?

La solution

Je l'ai trouvé. Le problème est dans la façon dont Windows stocke (et) récupère les données du Registre dans les versions 64 bits du système d'exploitation. Mon code était bien. L'article sur MSDN va dans certains détails. De cet article:

  

Sur Windows 64 bits, des parties du   les entrées de registre sont stockées séparément   pour une application 32 bits et 64 bits   applications et mappé dans séparé   vues de registre logiques à l'aide   Registre redirecteur et registre   réflexion, parce que la version 64 bits   d'une application peut utiliser différentes   clés de Registre et les valeurs que les   version 32 bits. Il y a aussi partagé   clés de registre qui ne sont pas redirigés   ou réfléchie.

La solution pour moi était d'ajouter ma clé AutoRun sous:

HKLM\Software\Wow6432Node\Microsoft\Command Processor

Ce qui obtient vraiment ma chèvre est que j'ai rencontré auparavant. Je si rarement imbécile avec le registre, je venais complètement oublié.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top