PBOSL: NTService -- Wie ?
Verfasst: 01.04.2010 18:20
Liebe Community,
ich habe schon die ganze Zeit rumprobiert, gegoogelt, die SuFu benutzt, aber ich bin einfach zu blöd dazu, mein Programm so einzurichten, das es als Dienst funktioniert.
Das Programm wird mit InstallShield installiert und als Dienst eingerichtet.
Der Dienst antwortet jedoch nicht, da das Programm keine Antwort gibt.
Wie baue ich dies nun in meine Anwendung ein?
Das komplette Programm soll als Dienst laufen.
ich habe schon die ganze Zeit rumprobiert, gegoogelt, die SuFu benutzt, aber ich bin einfach zu blöd dazu, mein Programm so einzurichten, das es als Dienst funktioniert.
Das Programm wird mit InstallShield installiert und als Dienst eingerichtet.
Der Dienst antwortet jedoch nicht, da das Programm keine Antwort gibt.
Wie baue ich dies nun in meine Anwendung ein?
Das komplette Programm soll als Dienst laufen.
Code: Alles auswählen
;- Allgemeine Werte aus- und festlegen
;
If OpenPreferences("settings.ini")
PreferenceGroup("Server")
Global Port = ReadPreferenceLong ("Port", 6832)
PreferenceGroup("Text")
ERROR_CREATE_SERVER$ = ReadPreferenceString("ERROR_CREATE_SERVER", "Can't create the server (port in use ?).")
ERROR_NETWORK_INITIALIZE$ = ReadPreferenceString("ERROR_NETWORK_INITIALIZE", "Can't initialize the network !")
ClosePreferences()
Else
MessageRequester("Fehler", "Die Einstellungsdatei konnte nicht geöffnet werden.", 0)
End
EndIf
;- Netzwerk einrichten
;
If InitNetwork() = 0
MessageRequester("Error", ERROR_NETWORK_INITIALIZE$, 0)
End
EndIf
;- Prozedure zum Herunterfahren des Rechners vorbereiten
;
Procedure EnableShutDown()
Protected Privileges.TOKEN_PRIVILEGES
Protected hToken.i
OpenProcessToken_(GetCurrentProcess_(), #TOKEN_ADJUST_PRIVILEGES | #TOKEN_QUERY, @hToken)
Privileges\PrivilegeCount = 1
Privileges\Privileges[0]\Attributes = #SE_PRIVILEGE_ENABLED
LookupPrivilegeValue_(0, "SeShutdownPrivilege", @Privileges\Privileges[0]\Luid)
AdjustTokenPrivileges_(hToken, 0, @Privileges, 0, 0, 0)
CloseHandle_(hToken)
EndProcedure
;- Speicher (Buffer) einrichten
;
*Buffer = AllocateMemory(1000)
;-----------------------------------------
;- START
;-----------------------------------------
If CreateNetworkServer(0, Port)
Repeat
SEvent = NetworkServerEvent()
If SEvent
ClientID = EventClient()
Select SEvent
Case 2
ReceiveNetworkData(ClientID, *Buffer, 1000)
If PeekS(*Buffer) = "SHUTDOWN"
SendNetworkString(ClientID, "SHUTDOWN_OK")
EnableShutDown()
ExitWindowsEx_(#EWX_SHUTDOWN | #EWX_FORCE, 0)
EndIf
EndSelect
EndIf
Delay(1000)
Until Quit = 1
CloseNetworkServer(0)
Else
MessageRequester("Fehler", ERROR_CREATE_SERVER$, 0)
EndIf
End