2013-03-04 9 views
9

Napisałem skrypt wsadowy do wykonania po instalacji przeprowadzonej przy pomocy Inno Setup. Problem polega na tym, że mam następujący wiersz polecenia dla mojego stworzenia usługę:Jak zainstalować usługę Windows za pomocą Inno Setup?

sc create MySQL start= auto DisplayName= MySQL binPath= "C:\A Nova Solução Informática\MySQL 5.5\bin\mysqld" --defaults-file="C:\A Nova Solução Informática\MySQL 5.5\my.ini" 

Litery akcentowane są problemem tego kodu, nie mogę go wykonać, jeśli otworzyć plik bat w cmd, ale kiedy Piszę, że usługa jest tworzona normalnie. Jak mogę to naprawić?

+1

Można użyć funkcji 'AfterInstall', a następnie' Exec' lub '[Run]' 'Filename:" {cmd} "; Parametry: "sc create MySQL start = auto DisplayName = MySQL binPath =" "C: \ A Nova Solução Informática \ MySQL 5.5 \ bin \ mysqld" "--defaults-file =" "C: \ A Nova Solução Informática \ MySQL 5.5 \ my.ini "" "; Flagi: runhidden' – RobeN

+1

Spróbuj dodać 'CHCP 65001' na początku pliku wsadowego i zapisz go jako UTF-8 bez LM. @Roben, lub po prostu sekcja "[Uruchom]". – TLama

+0

@RobeN, twoje rozwiązanie częściowo mi pomogło, problem polega na tym, że po zainstalowaniu usługi proces cmd pozostaje otwarty i instalacja nie kończy się sama. – juniorgarcia

Odpowiedz

3

Możesz spróbować dodać to polecenie do sekcji [RUN] (jak sugerowała TLama) lub utworzyć funkcję AfterInstall w sekcji [CODE].

[Run] 
Filename: "{cmd}"; Parameters: "sc create MySQL start= auto DisplayName= MySQL 
binPath= ""C:\A Nova Solução Informática\MySQL 5.5\bin\mysqld"" 
--defaults-file=""C:\A Nova Solução Informática\MySQL 5.5\my.ini"""; 
Flags: runhidden 
+1

Czy ktoś przetestował ten kod? Próbuję użyć tego kodu, ale to nie działa. Okno cmd po prostu wyskoczy i nic nie zrobi. – Newbee

+0

@Govs próbowałeś z '/ c' na początku' Parameters' ('cmd/c sc ...'), lub po prostu 'Filename:" sc "; Parametry: "create ..." ' – Matthieu

+0

' Nazwa pliku: "sc"; Parametry: "create service_name start = auto DisplayName = nazwa wyświetlana binPath =" "{sys} \ nazwa_uslugi.exe" ""; Flagi: runascurrentuser runhidden' działa dla mnie –

11

Zamiast bezpośrednio dzwoniąc SC, to odkurzacz (i łatwiejsze do pokonania ewentualnych błędów lub zależnościach usług) use the API. Zauważ, że w tym przykładzie założono, że używasz ANSI Inno, ale jest całkiem proste modyfikowanie tego dla Unicode.

Osobiście jednak wolę tworzyć polecenia instalacji/uruchamiania/zatrzymywania/deinstalacji w samym pliku wykonywalnym usługi, co powoduje, że samoczynnie się rejestruje. Oczywiście nie można tego zrobić dla usługi innej firmy, ale możesz sprawdzić, czy już obsługuje coś takiego.

Ostatnim punktem jest to, że nie wolno w sposób ciągły kodować ścieżki do folderu C :. Zamiast tego powinieneś używać {app}.

+0

Czy masz już wersję API w Unicode? Bardzo bym tego potrzebował. Dziękuję Ci! –

+2

@MaikenRoskilde Jeśli używasz Unicode Inno Setup, po prostu zmień sufiks "A" tuż przed znakiem '@' w pozycjach 'external' na' W'. Żadne inne zmiany nie powinny być wymagane. – Miral

+0

Połączony skrypt Silvio Iaccarino nie działa dla mnie. Używałem Unicode Inno Setup i próbowałem zmienić sufiksy zgodnie z sugestiami, ale nadal nie działało. Wystąpił błąd: "servicemanager nie jest dostępny" lub podobny. Zobacz [tę odpowiedź] (https://stackoverflow.com/a/5416744/207981) dla alternatywnego skryptu/biblioteki, która ** ** działa dla mnie. – bszom