2016-12-12 9 views
0

私はC#プロジェクトにwixを使用しています。私はセットアップのためのブートストラップを持っています。このブートストラップは、インストールします。wixでパッケージをインストールする

  • SQLサーバー2014
  • CLR型2014
  • システム管理オブジェクト2014 (Microsoftのサイトからのすべての3つの)
  • 私のアプリケーション

私の問題は、そのシステムであります管理オブジェクト2014はCLRタイプ2014に依存します。セットアップが実行されているときにSQL Serverがインストールされ、次にCLR 2014がタイプされ、セットアップでシステム管理オブジェクト2014 Iエラーメッセージ "Needs CLR Types"が表示されます。セットアップをキャンセルして再起動しても正常に動作します。

以前のインストール(または再起動のセットアップ)を検出するためにBundle.wxsを書き込むにはどうすればよいですか?

私のコードがあります:

<!-- SQL CLR Types --> 
<util:RegistrySearch Root="HKLM" 
        Key="SOFTWARE\Microsoft\Microsoft SQL Server 2014 Redist\SQL Server System CLR Types\CurrentVersion" 
        Value="Version" 
        Variable="CLRTypesx86"/> 
<util:RegistrySearch Root="HKLM" 
        Key="SOFTWARE\Microsoft\Microsoft SQL Server 2014 Redist\SQL Server System CLR Types\CurrentVersion" 
        Value="Version" 
        Variable="CLRTypesx64" 
        Win64="yes"/> 

<!-- System Managment Objects --> 
<util:RegistrySearch Root="HKLM" 
        Key="SOFTWARE\Microsoft\Microsoft SQL Server\SharedManagementObjects\CurrentVersion" 
        Value="Version" 
        Variable="SMO2014x86"/> 
<util:RegistrySearch Root="HKLM" 
        Key="SOFTWARE\Microsoft\Microsoft SQL Server\SharedManagementObjects\CurrentVersion" 
        Value="Version" 
        Variable="SMO2014x64" 
        Win64="yes"/> 

<!-- Install SQL CLR Types --> 
<PackageGroup Id="SQLCLRTypes"> 
    <MsiPackage Id="SQLCLRTypesx86" 
       SourceFile=".\Resources\SQLSysClrTypes2014x86.msi" 
       ForcePerMachine="yes" 
       Cache="no" 
       Compressed="no" 
       DownloadUrl="https://download.microsoft.com/download/1/3/0/13089488-91FC-4E22-AD68-5BE58BD5C014/ENU/x86/SQLSysClrTypes.msi" 
       Permanent="no" 
       Vital="yes"     
       InstallCondition="NOT VersionNT64 AND NOT CLRTypesx86" /> 
    <MsiPackage Id="SQLCLRTypesx64" 
       SourceFile=".\Resources\SQLSysClrTypes2014x64.msi" 
       ForcePerMachine="yes" 
       Cache="no" 
       Compressed="no" 
       DownloadUrl="https://download.microsoft.com/download/1/3/0/13089488-91FC-4E22-AD68-5BE58BD5C014/ENU/x64/SQLSysClrTypes.msi" 
       Permanent="no" 
       Vital="yes" 
       InstallCondition="VersionNT64 AND NOT CLRTypesx64" /> 
</PackageGroup> 

<!-- Install System Managment Objects --> 
<PackageGroup Id="SMO2014"> 
    <MsiPackage Id="SharedManagementObjects2014x86" 
       SourceFile=".\Resources\SharedManagementObjects_x86.msi" 
       ForcePerMachine="yes" 
       Cache="no" 
       Compressed="no" 
       DownloadUrl="https://download.microsoft.com/download/1/3/0/13089488-91FC-4E22-AD68-5BE58BD5C014/ENU/x86/SharedManagementObjects.msi" 
       Permanent="yes" 
       Vital="yes" 
       InstallCondition="NOT VersionNT64 AND NOT SMO2014x86" /> 
    <MsiPackage Id="SharedManagementObjects2014x64" 
       SourceFile=".\Resources\SharedManagementObjects_x64.msi" 
       ForcePerMachine="yes" 
       Cache="no" 
       Compressed="no" 
       DownloadUrl="https://download.microsoft.com/download/1/3/0/13089488-91FC-4E22-AD68-5BE58BD5C014/ENU/x64/SharedManagementObjects.msi" 
       Permanent="yes" 
       Vital="yes" 
       InstallCondition="VersionNT64 AND NOT SMO2014x64" /> 
</PackageGroup> 
+0

SQLCLRTypesインストールの実行後に再起動を要求していますか?ブートストラップのログには、それがあるかどうかを記述する必要があります。 'Applied execute package:SQLCLRTypesx64、result:0x0 [または他の値]、restart:Required' –

+0

SQLCLRTypesは再起動を必要としませんが、SMO2014はそれを必要とします。インストーラーがインストール中にインストールされたパッケージを更新しないようです。最初の実行時に:1- SQLCLRTypesがインストールされています。2- SMO2014に「missing SQLCLRTypes」というエラーがあります。インストーラを終了して再起動すると:1- SQLCLRTypesがインストールされていないため、インストールされていません。2- SMO2014がインストールされています。 –

+0

SMO2014はインストールできませんが、再起動後にSQLCRLTypesが再起動を要求します。ブートストラップがSQLCLRTYpesのインストール後に再起動しないからといって、再起動が必要ないわけではありません。ブートストラップのデフォルトの動作は、すべてのパッケージがインストールされるまで再起動を保留することです。ログを調べて、SQLCLRTypesが再起動を必要としないことを確認する必要があります。もしそうなら、ブートストラップを強制的に再起動させ、その後に続行することができます。 –

答えて

1

あなたSQLCLRTypesをインストールした場合は、それがいずれかが必要とされているブートストラップアプリケーションが、ブートストラップ・エンジンは再起動が必要であることに注意することを決定した後、続行されます通知されます再起動を必要としていますインストールの最後まで他のパッケージをインストールすると、最後のページには終了ページの代わりに再開ページが表示され、再起動ボタンが表示されます。

ブートストラップは、インストールの途中で再起動することもサポートし、マシンの再起動後に必要に応じてインストールを続行します。ダウンストリームパッケージはSQLCLRTypesに依存するため、この機能を使用することができます。これは、使用中のファイルが原因で再起動されるまで完全には存在しません。

C#を使用しているので、私は管理されたブートストラップを使用していると仮定します。

すべてのパッケージの終了後に発生するOnExecutePackageCompleteイベントにハンドラを追加する必要があります。

それはおそらくこれはあなたのブートストラップがSQLCLRTypesをインストールする代わりに、SMOをインストールしようとし続けた後、再起動ページを表示するようになります。この

private void ExecutePackageComplete(object sender, ExecutePackageCompleteEventArgs args) 
{ 
    if (e.Restart == ApplyRestart.RestartRequired && (e.PackageId == "SQLCLRTypesx86" || e.PackageId == "SQLCLRTypesx64")) 
    { 
     e.Result = Result.Restart 
    } 
} 

ようになります。マシンが再起動すると、インストールは自動的に再起動し、中断したところから再開します。 SQLCLRTypesを再起動する必要がある場合は、ブートストラップの再起動ページで再起動した後にインストールが再開されることを、いくつかの追加のテキストを付けて示すことができます。

関連する問題