2009-04-02 17 views
6

Ich verwende Windows Installer XML 3.0 (WIX3), um einige Software zu installieren.Benutzer auffordern, Anwendung während der Deinstallation zu schließen (in WiX)

Alles funktioniert gut, aber ich bin eine wirklich harte Zeit mit dem folgenden Anwendungsfall zu behandeln: die installierte Software noch ist ausgeführt wird, wenn der Benutzer auf Deinstallation versucht es. Das Standardverhalten scheint alle Dateien zu entfernen, lässt aber die Anwendung laufen (was in meinem Fall schwer zu sehen ist, weil sie in der Taskleiste sitzt).

Ich habe den folgenden Code in meiner installer.wxs Datei:

<InstallExecuteSequence> 
    <Custom Action="WixCloseApplications" Before="RemoveFiles" /> 
</InstallExecuteSequence> 

<util:CloseApplication Id="CloseFoobar" 
         CloseMessage="no" 
         Description="FooBar is still running!" 
         ElevatedCloseMessage="no" 
         RebootPrompt="no" 
         Target="foobar.exe" /> 

Aber das funktioniert nicht - noch schlimmer, ein Dialog zeigt, die während installieren für einen Neustart fragt!

Was wäre der richtige Weg?

Antwort

7

Soweit ich erinnere mich, es genug sein, sollte die folgenden Hinweise auf der Benutzeroberfläche hinzuzufügen: während der Installation

<DialogRef Id="FilesInUse" /> 
<DialogRef Id="MsiRMFilesInUse" /> 

Das CloseApplication Zeug ist nur zum Schließen von Anwendungen, aber es ist Buggy (zumindest, wenn ich versuche, es vor einigen Monaten, vielleicht ist es jetzt behoben?)

Leider ist dies wieder ein Beispiel für die sehr schlechte Dokumentation von WiX, nicht einmal Standard-Installation/Deinstallation Szenarien wie diese sind dokumentiert.

+0

Danke für die Antwort! Ich habe es auf diese Weise versucht, aber es funktioniert nicht für mich. Laut dem MSDN werden beide Dialoge auch nur während der Installation angezeigt und werden bei der Deinstallation nicht ausgewertet! – beef2k

+0

Ja, CloseApps braucht wahrscheinlich ein wenig Aufmunterung, um alle diese Fälle zu behandeln. Es behandelt noch nicht alle Szenarien. –

+1

@RobMensching Ist CloseApplication jetzt besser? – tofutim

1

Es gab eine ähnliche Frage, die vor ein paar Tagen auf der Mailingliste wix-users gestellt wurde. Die Antwort dort war:

Dies ist die Art, wie Windows Pre-Vista und Restart Manager funktioniert. Dort muss ein Top-Level-Fenster zur Verfügung stehen. Eine App im Fach zählt nicht .

Es gibt ein paar Threads zum Thema in der wix-users archive als auch.

0

Können Sie überprüfen, die Deinstallationslogs (here is how to enable them), soweit ich mich erinnere Windows Installer wird Ihre Dateien in einen Status "Löschen anstehend" und am Ende einen Neustart anfordern.
Sie können auch eine einfache benutzerdefinierte Aktion schreiben, die Ihren Prozess beenden wird.

0

für ein Beispiel, wie closeapplication zu verwenden, folgen Sie diesem Link: wix github project, unit tests

einen prompten Dialog Um zu zeigen, die Sie verwenden können: Antwort des <util:CloseApplication Id="CloseIE" Target="iexplore.exe" PromptToContinue="yes" Description="Test" />

0

Shay korrekt ist. Neuere Versionen von Windows Installer verhalten sich einfach so. Windows Installer nimmt sich viel Mühe, um sicherzustellen, dass Sie einen Neustart zur Zeit der Deinstallation durch Neuzuordnung vorhandener Dlls usw. vermeiden können. Im Allgemeinen kann eine laufende App nach der Deinstallation weiter ausgeführt werden, und bei der App werden einige Bereinigungen vorgenommen fährt ab, der Rest nach dem nächsten Neustart. Der Punkt ist, dass, wenn Windows Installer die in Gebrauch befindlichen Binärdateien an einen anderen Ort verschieben kann, alle Anwendungen laufen lassen und die verwendeten ersetzen (aber die neu gemappte Speicherunterstützung) und alles, was benötigt wird, ist das Löschen von etwas nicht essentiellem Junk beim nächsten Neustart warum einen Neustart erzwingen?Es ist nicht erforderlich, einen Dialog für die Verwendung von Dateien anzuzeigen, sodass keine Situation entsteht.

Dies kann Probleme verursachen, wenn die App versucht, auf eine Datei zuzugreifen, die deinstalliert wurde, aber ich nehme an, dass das Risiko als gering angesehen wird. Wenn die App wissen muss, dass eine Deinstallation durchgeführt wird, sollte die Integration mit Restart Manager funktionieren - Windows wird darauf hingewiesen, dass eine Deinstallation durchgeführt wird. Sonst ist Shay wieder richtig. Schreiben Sie gegebenenfalls eine benutzerdefinierte Aktion für die Deinstallation, um die Beendigung der App zu veranlassen.

0

Ich war auch mit diesem Problem konfrontiert. Das Ändern des Before-Attributs auf "InstallValidate" funktionierte für mich.

<Custom Before="InstallValidate" Action="WixCloseApplications"/> 
Verwandte Themen