2016-12-12 9 views
0

Ich verwende Wix für mein C# -Projekt. Ich habe einen Bootstrapper für das Setup. Das Bootstrap-Programm installieren:Installieren Sie Pakete mit Wix

  • SQL Server 2014
  • CLR-Typ 2014
  • System Management Object 2014 (alle drei von Microsoft-Website)
  • meine Anwendung

Mein Problem ist, dass System- Das Managementobjekt 2014 hängt von den CLR-Typen 2014 ab. Wenn mein Setup ausgeführt wird, wird SQL Server installiert, dann CLR-Typen 2014 und bei der Installation muss System Management Object 2014 I installiert werden habe eine Fehlermeldung "Benötigt CLR-Typen". Wenn ich das Setup abbringe und neu starte, funktioniert es einwandfrei.

Wie kann ich meine Bundle.wxs schreiben, um die vorherige Installation (oder Neustart-Setup) zu erkennen?

Es ist mein Code:

<!-- 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

Sollen die SQLCLRTypes-Installation (en) einen Neustart anfordern, nachdem sie ausgeführt wurde? Die Bootstrapper-Protokolle sollten angeben, ob dies der Fall ist oder nicht. Eine Protokollzeile wie folgt: 'Angewendetes Ausführungspaket: SQLCLRTypesx64, Ergebnis: 0x0 [oder ein anderer Wert], Neustart: Erforderlich' –

+0

SQLCLRTypes benötigt keinen Neustart, aber SMO2014 benötigt es. Es scheint, als ob das Installationsprogramm installierte Pakete während der Installation nicht aktualisiert. Bei der ersten Ausführung: 1 - SQLCLRTypes ist installiert. 2 - SMO2014 hat den Fehler "SQLCLRTypes fehlt". Wenn ich das Installationsprogramm verlasse und neu starte: 1- SQLCLRTypes ist vorhanden, also nicht installiert. 2 - SMO2014 ist installiert –

+0

Ich vermute sehr, dass SQLCRLTypes einen Neustart anfordert, weil SMO2014 nicht installiert werden kann, aber nach einem Neustart. Nur weil der Bootstrapper nach der Installation von SQLCLRTTypes nicht neu gestartet wird, muss er nicht neu gestartet werden. Das Standardverhalten des Bootstrappers besteht darin, den Neustart zu verzögern, bis alle Pakete installiert sind. Sie müssen sich die Protokolle ansehen und sicherstellen, dass für SQLCLRTypes kein Neustart erforderlich ist.Wenn dies der Fall ist, können wir den Bootstrapper zum Neustart zwingen und danach weitermachen. –

Antwort

1

Wenn Ihr SQLCLRTypes installieren ist ein Neustart erforderlich wird es die Bootstrap-Anwendung benachrichtigt, dass man benötigt wird, aber die Bootstrap-Motor entscheiden zu beachten, dass ein Neustart erforderlich ist und dann weiter Wenn Sie die anderen Pakete bis zum Ende der Installation installieren, wird auf der letzten Seite anstelle der Zielseite die Seite für den Neustart angezeigt, und es wird eine Schaltfläche für den Neustart angezeigt.

Der Bootstrapper unterstützt auch den Neustart während einer Installation und führt die Installation nach dem Neustart der Maschine fort. Wir können diese Funktion verwenden, da ein Downstream-Paket von SQLCLRTypes abhängt und dies bis zu einem Neustart aufgrund von Dateien, die am häufigsten verwendet werden, nicht vollständig vorhanden ist.

Da Sie C# verwenden, nehme ich an, dass Sie den verwalteten Bootstrapper verwenden.

Sie müssen dem OnExecutePackageComplete-Ereignis, das nach Abschluss jedes Pakets ausgelöst wird, einen Handler hinzufügen.

Es wäre wahrscheinlich so etwas wie dies

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

sieht dies Ihr Bootstrap-Programm verursacht den Neustart Seite zu zeigen, nachdem SQLCLRTypes anstatt weiterhin zu versuchen, die Installation von SMO zu installieren. Sobald der Computer neu gestartet wird, startet die Installation automatisch und setzt dort fort, wo sie unterbrochen wurde. Möglicherweise möchten Sie mit einem zusätzlichen Text angeben, dass die Installation nach dem Neustart auf der Neustart-Seite des Bootstrappers fortgesetzt wird, wenn SQLCLRTypes einen Neustart erfordert.

Verwandte Themen