Mise à jourComment démarrer PowerShell dans WiX avec un accès approprié au Registre Windows?
Intéressant, si je lance 32bit Powershell pour exécuter le script, il me donne la même erreur. Il semble que la PowerShell 32 bits n'a pas accès à l'arbre de registre 64 bits? J'ai essayé d'utiliser WixQuietExec64
mais il a donné la même erreur. J'ai également essayé de fournir le chemin complet de la powershell (C:\Windows\system32\WindowsPowerShell\v1.0\powershell.exe
) pour assurer l'installateur pour lancer la version 64bits, mais que STILL a donné la même erreur ... On dirait que cela peut être provoqué par l'installateur MSI lui-même étant 32bit ??
MSI (s) (4C:C0) [14:25:49:955]: Hello, I'm your 32bit Elevated Non-remapped custom action server.
Original post
Je le script test.ps1
suivant:
$exchangeroot = "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ExchangeServer\"
$allexchanges = Get-ChildItem -Path Registry::$exchangeroot -Name | Where-Object { $_ -match "^V.." }
$sorted = $allexchanges | Sort-Object -descending
If ($sorted.Count -gt 1) { $latest = $sorted[0] } Else { $latest = $sorted }
$setup = $exchangeroot + $latest + "\Setup"
$properties = Get-ItemProperty -Path Registry::$setup
$properties
Exécution du script dans une fenêtre PowerShell normale donne le résultat suivant:
PS C:\Program Files (x86)\TrustValidator Exchange Server Plugin> .\test.ps1
Required machine-level settings. : 1
Services : C:\Program Files\Microsoft\Exchange Server\V15
NewestBuild : 10845
CurrentBuild : 710737954
Information Store Service : 1
Messaging and Collaboration Event Logging : 1
MsiInstallPath : C:\Program Files\Microsoft\Exchange Server\V15\
...
Alors Ça marche. Maintenant, le lancement PowerShell de l'installateur WiX et l'exécution du script, il ne génère pas le même résultat:
WixQuietExec: Get-ItemProperty : Cannot find path
WixQuietExec: 'HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ExchangeServer\v15\Setup' because it
WixQuietExec: does not exist.
WixQuietExec: At C:\Program Files (x86)\TrustValidator Exchange Server Plugin\test.ps1:10
WixQuietExec: char:16
WixQuietExec: + $properties = Get-ItemProperty -Path Registry::$setup
WixQuietExec: + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
WixQuietExec: + CategoryInfo : ObjectNotFound: (HKEY_LOCAL_MACH...erver\v15\Set
WixQuietExec: up:String) , ItemNotFoundException
WixQuietExec: + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetIt
WixQuietExec: emPropertyCommand
Maintenant, si l'on observe le message d'erreur, il est comme si elle a accès de l'arbre jusqu'à HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ExchangeServer\
, parce que mon script chercherait et énumérerait toutes les versions, donc v15
doit être accessible jusqu'à ce point, mais quand il essaye d'aller plus loin pour obtenir le ItemProperty
, il ne peut pas. Cela m'amène à croire que quelque chose me manque peut-être quand je lance PowerShell à partir de l'installateur WiX ...?
C'est ce qui est dans mon fichier wxs:
<SetProperty Id="InstallPlugin"
Before ="InstallPlugin"
Sequence="execute"
Value =""powershell.exe" -Command "cd '[INSTALLFOLDER]'; & '[#TestPS1]' ; exit $$($Error.Count)"" />
<CustomAction Id="InstallPlugin" BinaryKey="WixCA" DllEntry="WixQuietExec" Execute="deferred" Return="ignore" Impersonate="no" />
Voici une liste des articles que je l'ai déjà essayé ou double vérifié:
- J'ai essayé différentes combinaisons de
-NoProfile
,-ExecutionPolicy ByPass
,-Version 2.0
et toujours pas bon. - Je suis déjà en cours d'exécution du programme d'installation comme
InstallPrivileges="elevated"
- Je suis déjà en cours d'exécution de la
CustomAction
commeExecute="deferred"
etImpersonate="no"
- J'ai essayé avec
AdminImage="yes"
- J'ai essayé de placer
<Property Id="MSIUSEREALADMINDETECTION" Value="1" />
Toute autre idée serait appréciée. :(