heute habe ich ein u.a. Problem mit der Funktion ServiceAddService.
Ich habe in meinem Setup mehrere Treiber, genau drei Stück. Alle werden mit der Funktion ServiceAddService als Kernel-Treiber installiert. Die Unterschiede sind wie folgt.
1. Treiber
ServiceInitParams();
SERVICE_IS_PARAMS.dwServiceType = SERVICE_KERNEL_DRIVER;
SERVICE_IS_PARAMS.dwErrorControl = SERVICE_ERROR_NORMAL;
ServiceAddService("Treiber1","Treiber 1","Das ist Treiber 1",TARGETDIR ^ "Treiber1.sys",FALSE,SERVICE_IS_PARAMS);
2. Treiber
ServiceInitParams();
SERVICE_IS_PARAMS.dwServiceType = SERVICE_KERNEL_DRIVER;
SERVICE_IS_PARAMS.dwErrorControl = SERVICE_ERROR_NORMAL;
ServiceAddService("Treiber2","Treiber 2","Das ist Treiber 2",TARGETDIR ^ "Treiber2.sys",FALSE,SERVICE_IS_PARAMS);
3. Treiber
ServiceInitParams();
SERVICE_IS_PARAMS.dwServiceType = SERVICE_KERNEL_DRIVER;
SERVICE_IS_PARAMS.dwErrorControl = SERVICE_ERROR_NORMAL;
SERVICE_IS_PARAMS.dwStartType = SERVICE_DEMAND_START;
ServiceAddService("Treiber3","Treiber 3","Das ist Treiber 3",WINSYSDIR ^ "Drivers" ^ "Treiber3.sys",FALSE,SERVICE_IS_PARAMS);
Die Treiber 2 und 3 sind über den ServiceControlManager nicht start- oder stopbar. Man kann beispielsweise nicht auf der Kommandozeile "net stop Treiber2" eingeben. Es würde sofort folgende Meldung erscheinen:
Die angeforderte Unterbrechung, Fortsetzung oder Beendigung ist für diesen Dienst ungültig.
Bis hierhin ist ja alles noch ok. Die Installation der Dienste funktioniert auch. Probleme habe ich mit dem Wartungsmodus bzw. mit allen Wartungsmodi. Während dem Aufruf von ServiceAddService (bei Reparieren oder Ändern) wird laut Dokumentation von InstallShield versucht, den Dienst anzuhalten, wenn er bereits existiert. Leider bleibt das Setup in der Funktion ServiceAddService hängen, wenn es sich dabei um Treiber2 oder Treiber3 handelt, die nicht beendet werden können. Ich hätte jetzt angenommen, dass InstallShield genauso wie auch auf der Kommandozeile sofort bemerken würde, dass der "Dienst" nicht beendet werden kann und aus der Funktion ServiceAddService zurückkommt. Leider ist dem nicht so. Während dem Aufruf - und ich habe eine viertel Stunde gewartet - teilen sich der Setup-Prozess als auch der ServiceControlManager (services.exe) die Computerauslastung von 100% - bis zu einem erzwungenen Neustart per RESET-Taste.
Treiber3 wurde auf die gleiche Art und Weise bereits mit einem InstallShield 7 Professional-Projekt installiert - immer ohne Probleme bei der Wartung oder Deinstallation.
Weiß jemand weiter?
Danke
Edited by Mõbius, 06 June 2006 - 18:04.