À partir cmd.exe problème
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.
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é.