2014-10-15 31 views
6

Potrzebuję zarejestrować port HTTP po instalacji, ale myślę, że to może być wyabstrahowane, aby ogólnie wykonać dowolne polecenie wiersza poleceń. Oto, co mam do tej pory:WiX: Jak wykonać polecenie linii poleceń po instalacji

<CustomAction Id="ExecPortOpen" Directory="INSTALLFOLDER" Execute="immediate" ExeCommand="cmd.exe &quot;netsh http add urlacl url=http://+:1234/ user=Everyone&quot;" Return="ignore" /> 
<InstallExecuteSequence> 
<Custom Action="ExecPortOpen" After="InstallFinalize" /> 
</InstallExecuteSequence> 

To po prostu otwiera wiersz polecenia w połowie instalacji i nic z nim nie robi. Próbowałem wcześniej dodać/c (nie mam pojęcia, co robi) pomiędzy cmd.exe i polecenia, ale to po prostu otwiera i zamyka wiersz polecenia bez wykonywania polecenia. Jak mogę to zrobić? Używam WiX 3.8.

+0

FYI, pojawi się nowe rozszerzenie HTTP do rejestracji portu HTTP w WiX v3.10/4.0. http://wixtoolset.org/issues/4505/ –

Odpowiedz

10

Rozwiązałem się, w rzeczywistości był to problem z UAC/pozwoleń. Dla wszystkich zainteresowanych jest tutaj działający kod:

<CustomAction Id="ExecPortOpen" Directory="INSTALLFOLDER" Execute="commit" Impersonate="no" ExeCommand="cmd.exe /c &quot;netsh http add urlacl url=http://+:1234/ user=Everyone&quot;" Return="check" /> 

<InstallExecuteSequence> 
    <Custom Action="ExecPortOpen" After="InstallInitialize" /> 
</InstallExecuteSequence> 
+2

Szukałem tak wiele w całej sieci, i jesteś pierwszym, który znalazłem, który wskazał, że 'Execute =" commit "' zachowa UAC dla 'netsh' podczas 'Execute =" immediate "' działa w trybie użytkownika. Dzięki! –