Este es un acceso directo a una aplicación que ejecuto desde Windows 7 y que inicia un programa en modo Windows XP.
%SystemRoot%\system32\rundll32.exe %SystemRoot%\system32\VMCPropertyHandler.dll,LaunchVMSal "Windows XP Mode" "||fc9407e9" "wIntegrate"
Parece que no puedo hacer que el comando PS Start-process funcione para ese objetivo.
Código que uso:
Start-Process %SystemRoot%\system32\rundll32.exe %SystemRoot%\system32\VMCPropertyHandler.dll,LaunchVMSal "Windows XP Mode" "||fc9407e9" "wIntegrate"
Aquí está el error que recibo:
Start-Process : A positional parameter cannot be found that accepts argument 'Windows XP Mode'.
At C:\Users\username.domain\Desktop\rebootpick.ps1:13 char:14
+ Start-Process <<<< %SystemRoot%\system32\rundll32.exe %SystemRoot%\system32\VMCPropertyHandler.dll,LaunchVMSal "Windows XP Mode" "||fc9407e9" "wIntegrate"
+ CategoryInfo : InvalidArgument: (:) [Start-Process], ParameterBindingException
+ FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.PowerShell.Commands.StartProcessCommand
¿Alguien ha tenido suerte ejecutando aplicaciones en modo Windows XP desde Powershell desde Windows 7?
Respuesta1
Esto debería hacerlo por ti:
$sysRoot = get-content env:systemroot;
Start-Process $sysRoot\system32\rundll32.exe -ArgumentList "$sysRoot\system32\VMCPropertyHandler.dll,LaunchVMSal `"Windows XP Mode`" `"||fc9407e9`" `"wIntegrate`"";
Remove-Variable sysRoot;
Primer truco: %systemroot% no funciona en PS, así que asignamos una variable ($sysRoot) para obtener esa variable de entorno en PS.
El siguiente truco es darse cuenta de que solo se proporciona un argumento para RunDLL32 y que ese argumento tiene argumentos. Por lo tanto, debemos encerrar todas las partes del argumento en un solo argumento usando comillas. Pero necesitamos mantener las comillas existentes en ese argumento, por lo que las escapamos con `.
Espero que ayude...