2017-07-25 5 views
2

更新Windowsレジストリに適切にアクセスしてWiXでPowerShellを起動するには?

興味深い私はスクリプトを実行するには、32ビットPowerShellを実行する場合、それは私に同じエラーを与えます。 32ビットのpowershellには64ビットレジストリツリーへのアクセス権がないようですか?私はWixQuietExec64を使ってみましたが、同じエラーが発生しました。私もインストーラが64ビットバージョンを起動するようにpowershell(C:\Windows\system32\WindowsPowerShell\v1.0\powershell.exe)の完全なパスを提供しようとしましたが、同じエラーが発生しました...これは32ビットのMSIインストーラ自体によって引き起こされるようですか?

MSI (s) (4C:C0) [14:25:49:955]: Hello, I'm your 32bit Elevated Non-remapped custom action server. 

オリジナルポスト

私は、次のしているtest.ps1スクリプト:

通常のPowerShellのウィンドウでスクリプトを実行
$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 

は、次のような出力が得られますので、

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\ 
... 

できます。今、私たちは、エラーメッセージを観察した場合、それはHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ExchangeServer\までツリーまでのアクセスを持っているかのように、それがあるため、ある

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 

:今のWiXインストーラからPowerShellを起動し、スクリプトを実行し、それは同じ結果を生成しません。私のスクリプトはすべてのバージョンを検索して一覧表示するので、v15にはその時点までアクセス可能でなければなりませんが、ItemPropertyを得るために深くしようとするとできません。

これは、WiXインストーラからPowerShellを起動したときに私が何か不足していると思うかもしれません。

これは私のWXSファイルには何がある:

以下
<SetProperty Id="InstallPlugin" 
    Before ="InstallPlugin" 
    Sequence="execute" 
    Value ="&quot;powershell.exe&quot; -Command &quot;cd '[INSTALLFOLDER]'; &amp; '[#TestPS1]' ; exit $$($Error.Count)&quot;" /> 
<CustomAction Id="InstallPlugin" BinaryKey="WixCA" DllEntry="WixQuietExec" Execute="deferred" Return="ignore" Impersonate="no" /> 

は、私はすでに試したかダブルチェックした項目のリストです:

  • 私は-NoProfileのさまざまな組み合わせを試してみました、 -ExecutionPolicy ByPass,-Version 2.0であり、依然として良好ではない。
  • 私はすでに私が<Property Id="MSIUSEREALADMINDETECTION" Value="1" />

を設定しようとしましたAdminImage="yes"

  • で試してみた
  • Execute="deferred"として及び Impersonate="no"私はすでに CustomActionを実行している InstallPrivileges="elevated"
  • としてインストーラを実行していますよ他の手がかりをいただければ幸いです。 :(

  • 答えて

    0

    私の...ああ...神...

    [OK]を私は最終的にそれが働いてしまった。ということは、私があり、実際にいくつかの問題だったとこれらの問題に対する解決策は、情報のこまごまとして実際にいました複数のSO質問から集まる。

    1. 起動にPowerShellをWiXのからの私のインストールスクリプトを実行する:

      は要約すると、ここで私がやろうとしたものです。

    2. インストールされたExchange Serverの場所
    3. のための私のスクリプトの検索Windowsレジストリ(64ビット版が必要です)私のスクリプトは、EMSのセッションでインストール場所
    4. からExchange管理シェル(EMS)のスクリプトを(64ビット、適切なユーザーが必要です)をロード、私のスクリプトは、Exchangeプラグインに関係なく、私が何をしたか

    問題点1)を登録するために他のスクリプトのブランチを実行し、WiXのインストーラは常に32Bに私のPowerShellを起動しますこれは設定値Platform="x64",Win64="yes"、さらにはWixQuietExec64とは関係ありません。私はさらに、Visual Studioでx64、それ以外はx64というインストーラをビルドしました。

    解決策は、powershellを直接参照することです。SetPropertyの中にsysnativeでなければなりません。

    C:\Windows\sysnative\WindowsPowerShell\v1.0\powershell.exe 
    

    私は実際に前にこれを試して、それが働いていなかったが、根本的な原因は、以下の問題点2でマスクされていたと思いました。

    問題2)どこでも

    私が読んで、彼らはあなたがExecute="deferred" Impersonate="No"で実行する必要が言いました。私はあなたが何かファンキーなことをしていない場合、これが実際にほとんどの場合に機能すると信じています。しかし、私はImpersonateにしなければならなかった。私は、WiXインストーラがユーザNT Authority/Systemと一緒にあなたのCAを昇格させて実行することを発見しました。私がソースにしようとしていたExchange Management Shellスクリプトは、基本的にあなたの資格情報を使用してExchange Serverとのセッションを確立しようとしていたので、これは私を駄目にしました...そしてもちろんあなたはNT Authority/Systemとして接続できません!

    ソリューションは、... Execute="deferred"を使用しているとき、私はいつもあなたがImpersonate="no"を使用しなければならない印象を受けました。上昇し、ユーザーが現在ログインしているようにWiXインストーラがあなたのCAを実行するだろうとそうImpersonate="yes"を使用することですが、あなたドン't

    私は数日間この問題のトラブルシューティングを断念してから、それに戻り、正常に機能しました。私はこれを考え出し助けた2つの最も役立つコマンドが実際にあった。

    • にwhoami
    • のGet-ChildItemコマンドレットのENV:(PROCESSOR_ARCHITECTUREをチェックする)
    関連する問題