Seite 1 von 1

GiveIO.sys Dienst deinstallieren geht nicht [Erledigt]

Verfasst: 28.06.2012 00:25
von TheCube
Hallo!
Ich nutze für einen direkten Portzugriff auf ein PCI-Device folgende .pbi-Basis, für die ich mich beim GiveIO-Erschaffer und Helle echt nachträglich bedanken muss :

Code: Alles auswählen

;- Zugriff auf Ports, W2k, WXP
;- "Helle" Klaus Helbing, 20.08.2008, PB4.20
;- Für den Zugriff wird die Datei "giveio.sys" (der Klassiker!) von Dale Roberts verwendet
;- Diese Datei liegt in der DataSection bei 
;- Für die Dienst-Installation sind Administrator-Rechte notwendig!
;- Nicht für Unicode!
... cut ...
;------------------ Dienst entfernen, wer mag, kann hier auch die Datei giveio.sys löschen
Procedure DienstRemove()
hSvc = OpenService_(hMgr, "giveio", #SERVICE_ALL_ACCESS)
IsDel = DeleteService_(hSvc)
If Messages
  If IsDel = 1
    MessageRequester("Statusmeldung von DienstRemove", "giveio wurde entfernt !")     ;1=entfernt
   Else
    MessageRequester("Statusmeldung von DienstRemove", "giveio konnte nicht entfernt werden !", 16)
  EndIf 
EndIf
CloseServiceHandle_(hSvc)
EndProcedure 
;------------------
... cut ...
Hier nun mein Code, der zum Installieren des Dienstes funktioniert aber zum deinstallieren immer versagt :cry: :

Code: Alles auswählen

XIncludeFile "giveio.pbi"    ;enthält auch giveio.sys als Data, bei Bedarf hier: http://www.mdcc-fun.de/k.helbing/giveio/giveio.zip

;------ Programmstart
Messages = 0                 ;für Fehlersuche oder reine Neugier
RegTest()                       ; Ist giveio in Registry schon vorhanden ?

If hReg
  
  Abfrage = MessageRequester("Abfrage", "Soll Dienst installiert werden ?", #PB_MessageRequester_YesNo)
  If Abfrage = #PB_MessageRequester_Yes
     Messages = 1           ;  Meldungen von .pbi einschalten
     DienstInst()                ; Dienst war noch nicht installiert, wird nun hoffentlich erledigt
     Messages = 0           ;  Meldungen von .pbi ausschalten
   Else
     End                          ; Dienst war noch nicht installiert, und das soll auch so bleiben
  EndIf 
  
Else
  
  Abfrage = MessageRequester("Abfrage", "Soll Dienst deinstalliert werden ?", #PB_MessageRequester_YesNo)
  If Abfrage = #PB_MessageRequester_Yes
     Messages = 1           ;  Meldungen von .pbi einschalten
     DienstRemove()         ; Dienst war schon installiert, wird nun hoffentlich entfernt
     Messages = 0           ;  Meldungen von .pbi ausschalten
   Else
     End                          ; Dienst war schon installiert, und das soll auch so bleiben
  EndIf 
    
EndIf

End
Selbstverständlich bin ich Admin, und habe das auf ein paar Systemen (XP/Win7) überprüft.
Installieren ist immer tadelos, starte ich das direkt nochmal (der Dienst wurde also nicht anderweitig gestartet
oder ist gar in Nutzung ..) werde ich korrekt nach Deinstallationswunsch gefragt .... nur scheitert das immer: "giveio konnte nicht entfernt werden !"
Hat da jemand eine Idee die ich ausprobieren könnte ? :)

Re: GiveIO.sys Dienst deinstallieren geht nicht

Verfasst: 28.06.2012 12:46
von Helle
Hallo TheCube,
mein Beispiel war so ausgelegt, das es in einem Rutsch durchläuft. Wird durch was auch immer der Dienst nicht beendet, kann er auch nicht entfernt werden. Also einfach mal bei Ende die Abfrage auf "If DriverStart <> 4" rausnehmen (also DienstEnd() zwangsweise starten), das (dein) Programm 2x ausführen und es sollte wieder wie gewünscht funktionieren. Diese Abfrage kann auch ganz rausgenommen werden oder Du verwendest ein anderes Ende-Kriterium (nicht die temporäre Variable DriverStart).
Viel Spaß!
Helle

Re: GiveIO.sys Dienst deinstallieren geht nicht

Verfasst: 28.06.2012 14:23
von mk-soft
Schau mal hier wegen Dienst installieren und deinstallieren...

http://www.purebasic.fr/german/viewtopi ... =8&t=25667

Re: GiveIO.sys Dienst deinstallieren geht nicht

Verfasst: 29.06.2012 01:20
von TheCube
@mk-soft:
Um mir aus dem Code die mögliche Lösung zu fischen brauch ich noch etwas Zeit :oops:
Aber ich habs im ersten Moment dort so verstanden, das man mit eigenen (selbsterstellten) Diensten zu tun hat !?

@helle:
1. Habe DienstEnd() zwangsgestartet ... Meldung "giveio wurde nicht beendet !"
2. Habe DienstStatus() verwendet ..... Meldung "giveio ist nicht gestartet !"
3. Habe DienstRemove() aufgerufen ... Meldung "giveio konnte nicht entfernt werden !" (wie bekannt /:-> )

Hast du vielleicht einen Code, wo du sagen kannst "bei mir wurde giveio installliert und wieder deinstallert" ? :praise:
Spart uns möglicherweise ein paar Posts .....

Re: GiveIO.sys Dienst deinstallieren geht nicht

Verfasst: 29.06.2012 10:01
von Helle
Hallo TheCube,
kein Problem, liegt auf http://www.mdcc-fun.de/k.helbing/giveio/GiveIO_Test.zip. Aber stelle bitte vor dem Test den jungfräulichen Zustand her:
- in Systemsteuerung-System-Hardware-Geräte_Manager-Ansicht-Ausgeblendete Geräte anzeigen-Nicht_PnP_Treiber-giveio deinstallieren (wenn vorhanden)
- in Registry giveio löschen, Pfad s.Code
- in Windows\System32\Drivers die giveio.sys löschen
- PC Neustart
Jetzt GiveIO_Test ausführen. Läuft bei mir (Win XP 32-Bit).
Viel Erfolg!
Helle

Re: GiveIO.sys Dienst deinstallieren geht nicht

Verfasst: 29.06.2012 12:05
von TheCube
Danke Helle,
dein Code funktioniert, selbst ohne händische Herstellung eines jungfräulichen Zustands. :allright:
Selbst wenn giveio.sys von irgendwann vorher schon vorhanden war, wird immer sauber entfernt.
Dadurch bin ich schliesslich auch auf den Fehler gestossen im Installer/Uninstaller Code von mir:
Im Zweig "Soll Dienst deinstalliert werden ?" fehlte schlicht als wichtigstes ...

Code: Alles auswählen

hMgr = OpenSCManager_(#Null, #Null, #GENERIC_READ)    ;Handle für Zugriff auf den Dienst-Manager
...mal abgesehen vom CloseServiceHandle_(hMgr) danach.
Also machmal könnte man echt >_< über sich selbst ....