Pour activer Microsoft-Hyper-V et Microsoft-Hyper-V-Gestion dans Windows 2008 R2 Server (64 bits), j'appelle StarXe comme processus. La commande que j'ai utilisée est p>
Methexe / Online / Get-FeatureInfo / FreeURENAME: Microsoft-hyper-v p>
Methexe / Online / Get-FeatureInfo / FreeURENAME: Microsoft-Hyper-V-Gestion-Clients P> blockQuote>
Cela fonctionne bien lorsque j'exécute cela de la ligne de commande, mais cela échoue lorsque j'essaie de l'exécuter à travers mon code. J'ai essayé la version 64 bits de SomptHexe sous le dossier C: \ Windows \ SysWow64, mais elle échoue aussi. Voici le message d'erreur que je reçois, p>
Vous ne pouvez pas servir de 64 bits en cours d'exécution Système d'exploitation avec une version 32 bits de démontre. Veuillez utiliser la version de Commun qui correspond à votre Architecture de l'ordinateur. P> blockQuote>
Qu'est-ce que je manque ici? P>
Mise à jour: SLAKS avait raison, mais le problème s'est avéré être que Mme Visual Studio Express Edition par des cibles par défaut x86 que je devais modifier manuellement dans le fichier .csproj à AnyCPU pour le faire fonctionner. P>
4 Réponses :
Parce que vous exécutez dans un processus 32 bits, vous êtes Run SYSWOW64 code> p>
% Windir% \ sysnatif \ selem.exe code> pour empêcher la redirection. P>
Essayé mais toujours face au même problème, mais pas de chance! Voici deux lignes du journal, MODM.exe: exécution de la ligne de commande: C: \ Windows \ SYSWOW64 \ MODHEXE / Online / Get-FeatureInfo / FeatureName: Microsoft-hyper-v i> STR FOURNISTER Store: PID = 892 Fournisseur de chargement de l'emplacement C: \ Windows \ System32 \ Dism \ folderProvider.dll - CDISMPROVIDERTRED.DLL - CDISMPROVIDERTRE :: internal_getProvider I> Bien que j'ai ciblé la version 64 bits de celui-ci, il recherche toujours les processus 32 bits 'Dishibararies
Cela ne semble pas fonctionner pour moi. Sur mon serveur (même système d'exploitation, également 64 bits), il n'y a pas de dossier C: \ Windows \ sysnatifs du tout ...
Le dossier C: \ Windows \ sysnatif n'est visible que vers 32 bits.
Créer ci-dessous le contenu dans un fichier de commandes, par exemple Rundism.bat appelez le fichier de commandes dans votre programme. Sysnative n'est pas un vrai dossier, vous ne pouvez donc pas appeler le code ci-dessus dans votre programme directement, il doit être appelé par système. Cette façon est fonctionnée pour moi. P> p>
Je développe sur Mac maintenant, je ne peux donc pas vérifier cela, mais peut être utile pour quelqu'un d'autre qui est confronté à cette question. Merci
La chose est que vous devez appeler le Comme @ eric Xu dit, vous devez résoudre le chemin car il n'est pas un vrai chemin . Vous trouverez ci-dessous le code qui fonctionne pour moi. Il détecte fondamentalement l'architecture du système, résout le chemin en fonction de l'architecture, puis appelle le proprementhexe code> dépend sur l'architecture du système.
DémprimaXe code> P>
string system32Directory = Path.Combine(Environment.ExpandEnvironmentVariables("%windir%"), "system32", "dism.exe");
if (Environment.Is64BitOperatingSystem && !Environment.Is64BitProcess)
{
// For 32-bit processes on 64-bit systems, %windir%\system32 folder
// can only be accessed by specifying %windir%\sysnative folder.
system32Directory = Path.Combine(Environment.ExpandEnvironmentVariables("%windir%"), "sysnative", "dism.exe");
}
J'ai dû utiliser "sysnative \ selem.exe" Si j'ai ajouté% Windir% \ Cela échouerait, j'utilise VS2017 Installation sur Server 2012R2. Tnhx! p>
SYSWOW64 CODE> contient des talons 32 bits, pas des exécutables 64 bits.