2009-02-11 11 views
68

Jestem pewien, że jest to dość łatwe, ale miałem z tym trochę problemów. Mam niestandardową akcję, która uruchamia inny instalator (inny niż msi). Niestety, zauważyłem, że uruchamia także instalator na UNinstallation!Jak wykonać niestandardową akcję tylko podczas instalacji (nie odinstalować)?

Przeanalizowałem opcje, ale nie mogę "znaleźć sposobu na zatrzymanie tego. Jeśli ktokolwiek mógłby mi pomóc, byłbym niezwykle wdzięczny.

Ponadto, jak ustawić niestandardową akcję, aby wyłączyć się tylko podczas odinstalowywania? Każda pomoc jest bardzo ceniona!

+4

Dla odniesienia: [** Wspólne warunki MSI Ściągawka **] (http: // blogów. flexerasoftware.com/installtalk/2013/04/installer-cheat-sheet-series.html). –

Odpowiedz

154

Dodaj warunek do akcji, aby był uruchamiany tylko podczas instalacji, a nie deinstalacji.

run Akcja tylko podczas instalacji

NOT Installed AND NOT PATCH 

Akcja biegnie podczas instalacji i naprawy

NOT REMOVE 

działać na pierwszej instalacji tylko:

NOT Installed 

działać na wstępnej instalacji lub gdy naprawa jest wybrany.

NOT Installed OR MaintenanceMode="Modify" 

Aby uruchomić tylko działanie podczas deinstalacji kliknąć na poniższy warunek:

REMOVE~="ALL" 

się tylko do uruchomienia działań podczas aktualizacji:

Installed AND NOT REMOVE 
+0

i do ponownego zainstalowania? –

+1

@Rasa co masz na myśli mówiąc o trybie ponownej instalacji? W MSI nie ma czegoś takiego, prawdopodobnie szukasz "Naprawy" (NIE ZDEJMUJESZ). Jeśli logujesz wyjście MSI, możesz zobaczyć, jakie dokładnie wartości będą używane w powyższych warunkach i ustalić, które z nich pasują do twojej sytuacji. – saschabeaumont

+1

Co powiesz na modyfikację? Uruchamianie akcji tylko po odinstalowaniu funkcji? Uruchamianie akcji tylko wtedy, gdy jest instalowana funkcja? Uruchamianie akcji tylko wtedy, gdy funkcja jest Naprawiona? –

0

Warunkiem sprawie działań niestandardowych, prawdopodobnie z dopasowaną akcję niestandardową, aby odinstalować. Nie wiesz, jakich narzędzi używasz, ale zakładając, że instalacja dodatkowa jest powiązana z komponentem, użyłbym tego stanu komponentu. Stan = 3 oznacza stan docelowy zainstalowanego. Stan = 2 oznacza stan docelowy nieobecny. Zwróć uwagę, że stan nie zostanie ustawiony, jeśli nie ma żadnych zmian.

7

Trochę korekty:

Wreszcie, aby tylko uruchomić akcję podczas deinstalacji kliknąć na poniższy warunek: REMOVE="ALL"

ta wydaje się bardziej odpowiedni jako własność REMOVE zawiera funkcje są odinstalowane.
Więc jeśli zrobię modyfikację, aby usunąć jedną funkcję, REMOVE ma wartość true, a akcja, która miała zostać wykonana tylko w przypadku dezinstalacji, jest wykonywana przy modyfikacji.
More details here on MSDN

+1

Dzięki, to było pomocne! – M3NTA7

6

Przykład:

<InstallExecuteSequence> 
.. 
    <Custom Action="QtExecIdOfCA" Before="InstallFinalize">NOT Installed</Custom> 
.. 
</InstallExecuteSequence> 

.. 
.. 
<CustomAction Id="QtExecIdOfCA" BinaryKey="WixCA" DllEntry="CAQuietExec" Execute="deferred" Return="ignore" Impersonate="no"/> 

Wskazówka! Warunek zostanie dodany do tagu <Custom> i nie<CustomAction> go mylić mnie, bo klienta następuje poprzez działanie attribue

Powiązane problemy