2014-06-30 12 views
15

Jestem nowym instalatorem wix. Opracowałem konfigurację za pomocą instalatora wix dla mojej aplikacji i muszę wykonać akcję niestandardową, aby uruchomić polecenie w cmd.exe. W XP działa dobrze. Ale w Windows 8 & 7, polecenie cmd musi zostać uruchomione jako administrator.Uruchom ExeCommand w customAction jako tryb administratora w instalatorze Wix

Mam wyszukiwane hasło i znalazłem słowa kluczowe Podwyższone uprawnienia i podszywanie się pod numer mogą mi pomóc.

<Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" InstallPrivileges="elevated"></Package> 

Jak widać powyżej, użyłem atrybut InstallScope ustawiony perMachine i użyłem personifikować = "Nie" w elemencie CustomAction:

<CustomAction Id='comReg' Directory='INSTALLLOCATION' Impersonate='no' 
    ExeCommand='"[NETFRAMEWORK40CLIENTINSTALLROOTDIR]regasm.exe" "[INSTALLLOCATION]myProduct.dll" /codebase' Return='check' /> 

Ale nie dostać nic zmiany podczas instalacji. Potrzebuję wiersza poleceń, aby otworzyć i uruchomić powyższe polecenie w trybie administratora.

A może ktoś proszę mi powiedzieć o tych słów kluczowych "podwyższonymi uprawnieniami & podszywać"

<InstallExecuteSequence> 
    <Custom Action='comReg' After='InstallFinalize'>NOT REMOVE</Custom> 
    <Custom Action='comUnreg' Before='RemoveFiles'>REMOVE</Custom> 
</InstallExecuteSequence> 

Jak to zrobić?

Odpowiedz

26

wix documentation here wyjaśnia podszywać atrybut:

Ten atrybut określa, czy Instalator Windows, które wykonuje jako LocalSystem, należy podszywać kontekst użytkownika użytkownika instalacyjnej podczas wykonywania tej czynności niestandardowej. Zazwyczaj wartość powinna być "tak", z wyjątkiem sytuacji, gdy niestandardowa akcja wymaga podwyższonych uprawnień, aby zastosować zmiany w maszynie.

Musisz także zrozumieć różnicę między odroczonymi a bezpośrednimi działaniami niestandardowymi. Zobacz atrybut Execute na tej samej stronie pomocy:

Ten atrybut wskazuje harmonogram akcji niestandardowej. Wartość tego atrybutu musi być jedną z następujących czynności:

odroczony Wskazuje, że akcja przebiega w niestandardowy skrypt (ewentualnie z podwyższonymi uprawnieniami). natychmiastowa Wskazuje, że niestandardowa akcja będzie działać podczas normalnego czasu przetwarzania z uprawnieniami użytkownika. To jest domyślne.

Obecnie czynność niestandardowa jest natychmiastowa, co oznacza, że ​​działa z uprawnieniami użytkownika. Zobacz this blog post na wiele szczegółów, ale w szczególności:

Wszelkie natychmiastowe działania niestandardowe personifikować użytkownika Wywoływanie. Przed Windows Vista nie stanowiło to problemu, ponieważ w tym momencie instalujący użytkownik administracyjny miał uprzywilejowany token. Wraz z wprowadzeniem UAC w systemie Windows Vista domyślnym tokenem administracyjnym z włączonym UAC jest filtrowany token i nie ma on wszystkich uprawnień. Od natychmiastowe akcje niestandardowe nie mają na celu modyfikacji stanu maszyny - tylko w celu gromadzenia danych stanu i planowania działań niestandardowych w celu uruchomienia odroczonego - to nadal nie powinno stanowić problemu.Wszakże w tym momencie wszystko co powinno się odbywać, to generowanie skryptów instalacyjnych i przywracania.

Nigdy nie należy modyfikować stanu maszyny za pomocą natychmiastowej niestandardowej akcji. Użyj odroczony jedną i zachować podszywania się nie, i to powinno działać:

<CustomAction Id='comReg' Directory='INSTALLLOCATION' Execute='deferred' Impersonate='no' ExeCommand='"[NETFRAMEWORK40CLIENTINSTALLROOTDIR]regasm.exe" "[INSTALLLOCATION]EAWordImporter.dll" /codebase' Return='check' /> 

EDIT: Harmonogram działania niestandardowe przy użyciu elementu InstallExecuteSequence:

<InstallExecuteSequence> 
    <Custom Action='comReg' Before='InstallFinalize'/> 
</InstallExecuteSequence> 
+0

to pokazuje mi błąd jako błąd ICE77: comReg jest niestandardową akcją skryptową. Musi być zsekwencjonowany pomiędzy operacją InstallInitialize a operacją InstallFinalize w tabeli InstallExecuteSequence @tjleigh – Arshad

+0

Gdzie zaplanowałeś niestandardowe działanie? Spójrz na swój element ''. Jak podaje błąd, musi to być między InstallInitialize i InstallFinalize. Najprawdopodobniej powiedziałbym "Before =" InstallFinalize "'. – tjleigh

+0

@ tjleigh: Zmieniłem moje pytanie, czy możesz mi pomóc z tego.! – Arshad

Powiązane problemy