Dans Windows, lorsqu'une invite de commande est ouverte (cmd.exe), les clés de Registre:problème de démarrage cmd.exe
HKLM \ Software \ Microsoft \ Command Processor
HKCU \ Software \ Microsoft \ Command Le processeur
sont vérifiés pour une valeur appelée "AutoRun". S'il est trouvé, le fichier batch nommé dans la valeur est exécuté, fournissant une fonctionnalité autoexec. Si les deux clés contiennent des valeurs AutoRun, les deux seront exécutées. Impressionnant! J'utilise Process.Start
pour exécuter cmd.exe et le comportement AutoRun ne se produit pas. 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 j'essaie fonctionne parfaitement (dans ce lancement une fenêtre de commande), mais le AutoRun le comportement ne se produit jamais.
Où est le code qui vérifie le registre? – bitxwise
Cela fonctionne, je n'ai pas trouvé de problème dans le code –
si vous avez mis votre "autorun" seulement dans la clé HKLM, votre problème peut être la virtualisation. Avez-vous mis quelque chose dans le HKCU et n'obtenez rien? En outre, avez-vous testé cela en lançant des invites de commande à main levée pour que vous sachiez que le seul problème est de savoir comment votre code les lance? –