→ 🚀What's New? Join Us for the Fall Product Launch! Register Now !
‎03-18-2008 01:39 PM
#include "ServiceControl.au3"
Opt("TrayIconHide", 1)
Opt("RunErrorsFatal", 0)
$winvncdir = "TEMP"
$servicename = "VNC"
;here I pass some definitions to the service startup command, the screen asking for user authorization will appear for 30s as defined in -QueryConnectTimeout=30, if no user is logged on, I can enter the pc directly (QueryOnlyIfLoggedOn)
$servicecmd = "c:\" & $winvncdir & "\winvnc4.exe -service -QueryConnect=1 -QueryConnectTimeout=30 -SecurityTypes=none -QueryOnlyIfLoggedOn -DisableClose"
$HostName = $cmdline[1]
Ping($HostName)
If @error Then
MsgBox(0, "Error", "Hostname " & $HostName & " is unreachable")
Exit
EndIf
If Not FileExists("\\" & $HostName & "\c$\" & $winvncdir) Then DirCreate("\\" & $HostName & "\c$\" & $winvncdir)
FileInstall("wm_hooks.dll", "\\" & $HostName & "\c$\" & $winvncdir & "\wm_hooks.dll")
FileInstall("winvnc4.exe", "\\" & $HostName & "\c$\" & $winvncdir & "\winvnc4.exe")
FileInstall("vncviewer.exe", @ScriptDir & "\vncviewer.exe")
If Not _ServiceExists ($HostName, $servicename) Then
_CreateService ($HostName, $servicename, "VNC", $servicecmd, "LocalSystem", "", 0x110)
EndIf
If Not _ServiceRunning ($HostName, $servicename) Then
_StartService ($HostName, $servicename)
EndIf
; wait for the vnc client to close, then remove the service
RunWait(@ScriptDir & "\vncviewer.exe " & $HostName)
; remove the service, delete the temporary files (wm_hooks.dll sometimes fails to remove, but it's not important I guess)
_StopService ($HostName, $servicename)
_DeleteService ($HostName, $servicename)
FileDelete("\\" & $HostName & "\c$\" & $winvncdir & "\winvnc4.exe")
FileDelete("\\" & $HostName & "\c$\" & $winvncdir & "\wm_hooks.dll")
\\server\share$\Lansweeper\remotevnclansweeper.exe {computer}
‎10-22-2009 09:23 AM
remotevnclansweeper.exe hostname
‎10-22-2009 12:36 AM
‎02-25-2009 05:56 PM
‎12-24-2008 02:10 AM
‎09-02-2009 06:18 PM
DanielH wrote:
Yup. Just to make sure I uninstalled RealVNC, reinstalled it, used the 3 files needed, then recompiled. I still received the same error. When you ask, "Are you using RealVNC," you do mean the 3 files right? As well as on my machine. Thanks again.
$HostName = $cmdline[0]
$HostName = $cmdline[1]
‎12-22-2008 02:15 PM
‎12-18-2008 11:12 PM
#include "ServiceControl.au3"
Opt("TrayIconHide", 1)
Opt("RunErrorsFatal", 2)
$winvncdir = "TEMP"
$servicename = "VNC"
;here I pass some definitions to the service startup command, the screen asking for user authorization will appear for 30s as defined in -QueryConnectTimeout=30, if no user is logged on, I can enter the pc directly (QueryOnlyIfLoggedOn)
$servicecmd = "c:\" & $winvncdir & "\winvnc4.exe -service -QueryConnect=1 -QueryConnectTimeout=30 -SecurityTypes=none -QueryOnlyIfLoggedOn -DisableClose"
$HostName = $cmdline[0]
Ping($HostName)
If @error Then
MsgBox(0, "Error", "Hostname " & $HostName & " is unreachable")
Exit
EndIf
If Not FileExists("\\" & $HostName & "\c$\" & $winvncdir) Then DirCreate("\\" & $HostName & "\c$\" & $winvncdir)
FileInstall("wm_hooks.dll", "\\" & $HostName & "\c$\" & $winvncdir & "\wm_hooks.dll")
FileInstall("winvnc4.exe", "\\" & $HostName & "\c$\" & $winvncdir & "\winvnc4.exe")
FileInstall("vncviewer.exe", @ScriptDir & "\vncviewer.exe")
If Not _ServiceExists ($HostName, $servicename) Then
_CreateService ($HostName, $servicename, "VNC", $servicecmd, "LocalSystem", "", 0x110)
EndIf
If Not _ServiceRunning ($HostName, $servicename) Then
_StartService ($HostName, $servicename)
EndIf
; wait for the vnc client to close, then remove the service
RunWait(@ScriptDir & "\vncviewer.exe " & $HostName)
; remove the service, delete the temporary files (wm_hooks.dll sometimes fails to remove, but it's not important I guess)
_StopService ($HostName, $servicename)
_DeleteService ($HostName, $servicename)
FileDelete("\\" & $HostName & "\c$\" & $winvncdir & "\winvnc4.exe")
FileDelete("\\" & $HostName & "\c$\" & $winvncdir & "\wm_hooks.dll")
Global $STANDARD_RIGHTS_REQUIRED = 0x000F0000
; Service Control Manager access types
Global $SC_MANAGER_CONNECT = 0x0001
Global $SC_MANAGER_CREATE_SERVICE = 0x0002
Global $SC_MANAGER_ENUMERATE_SERVICE = 0x0004
Global $SC_MANAGER_LOCK = 0x0008
Global $SC_MANAGER_QUERY_LOCK_STATUS = 0x0010
Global $SC_MANAGER_MODIFY_BOOT_CONFIG = 0x0020
Global $SC_MANAGER_ALL_ACCESS = BitOR($STANDARD_RIGHTS_REQUIRED, _
$SC_MANAGER_CONNECT, _
$SC_MANAGER_CREATE_SERVICE, _
$SC_MANAGER_ENUMERATE_SERVICE, _
$SC_MANAGER_LOCK, _
$SC_MANAGER_QUERY_LOCK_STATUS, _
$SC_MANAGER_MODIFY_BOOT_CONFIG)
; Service access types
Global $SERVICE_QUERY_CONFIG = 0x0001
Global $SERVICE_CHANGE_CONFIG = 0x0002
Global $SERVICE_QUERY_STATUS = 0x0004
Global $SERVICE_ENUMERATE_DEPENDENTS = 0x0008
Global $SERVICE_START = 0x0010
Global $SERVICE_STOP = 0x0020
Global $SERVICE_PAUSE_CONTINUE = 0x0040
Global $SERVICE_INTERROGATE = 0x0080
Global $SERVICE_USER_DEFINED_CONTROL = 0x0100
Global $SERVICE_ALL_ACCESS = BitOR($STANDARD_RIGHTS_REQUIRED, _
$SERVICE_QUERY_CONFIG, _
$SERVICE_CHANGE_CONFIG, _
$SERVICE_QUERY_STATUS, _
$SERVICE_ENUMERATE_DEPENDENTS, _
$SERVICE_START, _
$SERVICE_STOP, _
$SERVICE_PAUSE_CONTINUE, _
$SERVICE_INTERROGATE, _
$SERVICE_USER_DEFINED_CONTROL)
; Service controls
Global $SERVICE_CONTROL_STOP = 0x00000001
Global $SERVICE_CONTROL_PAUSE = 0x00000002
Global $SERVICE_CONTROL_CONTINUE = 0x00000003
Global $SERVICE_CONTROL_INTERROGATE = 0x00000004
Global $SERVICE_CONTROL_SHUTDOWN = 0x00000005
Global $SERVICE_CONTROL_PARAMCHANGE = 0x00000006
Global $SERVICE_CONTROL_NETBINDADD = 0x00000007
Global $SERVICE_CONTROL_NETBINDREMOVE = 0x00000008
Global $SERVICE_CONTROL_NETBINDENABLE = 0x00000009
Global $SERVICE_CONTROL_NETBINDDISABLE = 0x0000000A
Global $SERVICE_CONTROL_DEVICEEVENT = 0x0000000B
Global $SERVICE_CONTROL_HARDWAREPROFILECHANGE = 0x0000000C
Global $SERVICE_CONTROL_POWEREVENT = 0x0000000D
Global $SERVICE_CONTROL_SESSIONCHANGE = 0x0000000E
; Service types
Global $SERVICE_KERNEL_DRIVER = 0x00000001
Global $SERVICE_FILE_SYSTEM_DRIVER = 0x00000002
Global $SERVICE_ADAPTER = 0x00000004
Global $SERVICE_RECOGNIZER_DRIVER = 0x00000008
Global $SERVICE_DRIVER = BitOR($SERVICE_KERNEL_DRIVER, _
$SERVICE_FILE_SYSTEM_DRIVER, _
$SERVICE_RECOGNIZER_DRIVER)
Global $SERVICE_WIN32_OWN_PROCESS = 0x00000010
Global $SERVICE_WIN32_SHARE_PROCESS = 0x00000020
Global $SERVICE_WIN32 = BitOR($SERVICE_WIN32_OWN_PROCESS, _
$SERVICE_WIN32_SHARE_PROCESS)
Global $SERVICE_INTERACTIVE_PROCESS = 0x00000100
Global $SERVICE_TYPE_ALL = BitOR($SERVICE_WIN32, _
$SERVICE_ADAPTER, _
$SERVICE_DRIVER, _
$SERVICE_INTERACTIVE_PROCESS)
; Service start types
Global $SERVICE_BOOT_START = 0x00000000
Global $SERVICE_SYSTEM_START = 0x00000001
Global $SERVICE_AUTO_START = 0x00000002
Global $SERVICE_DEMAND_START = 0x00000003
Global $SERVICE_DISABLED = 0x00000004
; Service error control
Global $SERVICE_ERROR_IGNORE = 0x00000000
Global $SERVICE_ERROR_NORMAL = 0x00000001
Global $SERVICE_ERROR_SEVERE = 0x00000002
Global $SERVICE_ERROR_CRITICAL = 0x00000003
;===============================================================================
; Description: Starts a service on a computer
; Parameters: $sComputerName - name of the target computer. If empty, the local computer name is used
; $sServiceName - name of the service to start
; Requirements: None
; Return Values: On Success - 1
; On Failure - 0 and @error is set to extended Windows error code
; Note: This function does not check to see if the service has started successfully
;===============================================================================
Func _StartService($sComputerName, $sServiceName)
Local $hAdvapi32
Local $hKernel32
Local $arRet
Local $hSC
Local $hService
Local $lError = -1
$hAdvapi32 = DllOpen("advapi32.dll")
If $hAdvapi32 = -1 Then Return 0
$hKernel32 = DllOpen("kernel32.dll")
If $hKernel32 = -1 Then Return 0
$arRet = DllCall($hAdvapi32, "long", "OpenSCManager", _
"str", $sComputerName, _
"str", "ServicesActive", _
"long", $SC_MANAGER_CONNECT)
If $arRet[0] = 0 Then
$arRet = DllCall($hKernel32, "long", "GetLastError")
$lError = $arRet[0]
Else
$hSC = $arRet[0]
$arRet = DllCall($hAdvapi32, "long", "OpenService", _
"long", $hSC, _
"str", $sServiceName, _
"long", $SERVICE_START)
If $arRet[0] = 0 Then
$arRet = DllCall($hKernel32, "long", "GetLastError")
$lError = $arRet[0]
Else
$hService = $arRet[0]
$arRet = DllCall($hAdvapi32, "int", "StartService", _
"long", $hService, _
"long", 0, _
"str", "")
If $arRet[0] = 0 Then
$arRet = DllCall($hKernel32, "long", "GetLastError")
$lError = $arRet[0]
EndIf
DllCall($hAdvapi32, "int", "CloseServiceHandle", "long", $hService)
EndIf
DllCall($hAdvapi32, "int", "CloseServiceHandle", "long", $hSC)
EndIf
DllClose($hAdvapi32)
DllClose($hKernel32)
If $lError <> -1 Then
SetError($lError)
Return 0
EndIf
Return 1
EndFunc
;===============================================================================
; Description: Stops a service on a computer
; Parameters: $sComputerName - name of the target computer. If empty, the local computer name is used
; $sServiceName - name of the service to stop
; Requirements: None
; Return Values: On Success - 1
; On Failure - 0 and @error is set to extended Windows error code
; Note: This function does not check to see if the service has stopped successfully
;===============================================================================
Func _StopService($sComputerName, $sServiceName)
Local $hAdvapi32
Local $hKernel32
Local $arRet
Local $hSC
Local $hService
Local $lError = -1
$hAdvapi32 = DllOpen("advapi32.dll")
If $hAdvapi32 = -1 Then Return 0
$hKernel32 = DllOpen("kernel32.dll")
If $hKernel32 = -1 Then Return 0
$arRet = DllCall($hAdvapi32, "long", "OpenSCManager", _
"str", $sComputerName, _
"str", "ServicesActive", _
"long", $SC_MANAGER_CONNECT)
If $arRet[0] = 0 Then
$arRet = DllCall($hKernel32, "long", "GetLastError")
$lError = $arRet[0]
Else
$hSC = $arRet[0]
$arRet = DllCall($hAdvapi32, "long", "OpenService", _
"long", $hSC, _
"str", $sServiceName, _
"long", $SERVICE_STOP)
If $arRet[0] = 0 Then
$arRet = DllCall($hKernel32, "long", "GetLastError")
$lError = $arRet[0]
Else
$hService = $arRet[0]
$arRet = DllCall($hAdvapi32, "int", "ControlService", _
"long", $hService, _
"long", $SERVICE_CONTROL_STOP, _
"str", "")
If $arRet[0] = 0 Then
$arRet = DllCall($hKernel32, "long", "GetLastError")
$lError = $arRet[0]
EndIf
DllCall($hAdvapi32, "int", "CloseServiceHandle", "long", $hService)
EndIf
DllCall($hAdvapi32, "int", "CloseServiceHandle", "long", $hSC)
EndIf
DllClose($hAdvapi32)
DllClose($hKernel32)
If $lError <> -1 Then
SetError($lError)
Return 0
EndIf
Return 1
EndFunc
;===============================================================================
; Description: Checks if a service exists on a computer
; Parameters: $sComputerName - name of the target computer. If empty, the local computer name is used
; $sServiceName - name of the service to check
; Requirements: None
; Return Values: On Success - 1
; On Failure - 0
;===============================================================================
Func _ServiceExists($sComputerName, $sServiceName)
Local $hAdvapi32
Local $arRet
Local $hSC
Local $bExist = 0
$hAdvapi32 = DllOpen("advapi32.dll")
If $hAdvapi32 = -1 Then Return 0
$arRet = DllCall($hAdvapi32, "long", "OpenSCManager", _
"str", $sComputerName, _
"str", "ServicesActive", _
"long", $SC_MANAGER_CONNECT)
If $arRet[0] <> 0 Then
$hSC = $arRet[0]
$arRet = DllCall($hAdvapi32, "long", "OpenService", _
"long", $hSC, _
"str", $sServiceName, _
"long", $SERVICE_INTERROGATE)
If $arRet[0] <> 0 Then
$bExist = 1
DllCall($hAdvapi32, "int", "CloseServiceHandle", "long", $arRet[0])
EndIf
DllCall($hAdvapi32, "int", "CloseServiceHandle", "long", $hSC)
EndIf
DllClose($hAdvapi32)
Return $bExist
EndFunc
;===============================================================================
; Description: Checks if a service is running on a computer
; Parameters: $sComputerName - name of the target computer. If empty, the local computer name is used
; $sServiceName - name of the service to check
; Requirements: None
; Return Values: On Success - 1
; On Failure - 0
; Note: This function relies on the fact that only a running service responds
; to a SERVICE_CONTROL_INTERROGATE control code. Check the ControlService
; page on MSDN for limitations with using this method.
;===============================================================================
Func _ServiceRunning($sComputerName, $sServiceName)
Local $hAdvapi32
Local $arRet
Local $hSC
Local $hService
Local $bRunning = 0
$hAdvapi32 = DllOpen("advapi32.dll")
If $hAdvapi32 = -1 Then Return 0
$arRet = DllCall($hAdvapi32, "long", "OpenSCManager", _
"str", $sComputerName, _
"str", "ServicesActive", _
"long", $SC_MANAGER_CONNECT)
If $arRet[0] <> 0 Then
$hSC = $arRet[0]
$arRet = DllCall($hAdvapi32, "long", "OpenService", _
"long", $hSC, _
"str", $sServiceName, _
"long", $SERVICE_INTERROGATE)
If $arRet[0] <> 0 Then
$hService = $arRet[0]
$arRet = DllCall($hAdvapi32, "int", "ControlService", _
"long", $hService, _
"long", $SERVICE_CONTROL_INTERROGATE, _
"str", "")
$bRunning = $arRet[0]
DllCall($hAdvapi32, "int", "CloseServiceHandle", "long", $hService)
EndIf
DllCall($hAdvapi32, "int", "CloseServiceHandle", "long", $hSC)
EndIf
DllClose($hAdvapi32)
Return $bRunning
EndFunc
;===============================================================================
; Description: Creates a service on a computer
; Parameters: $sComputerName - name of the target computer. If empty, the local computer name is used
; $sServiceName - name of the service to create
; $sDisplayName - display name of the service
; $sBinaryPath - fully qualified path to the service binary file
; The path can also include arguments for an auto-start service
; $sServiceUser - [optional] default is LocalSystem
; name of the account under which the service should run
; $sPassword - [optional] default is empty
; password to the account name specified by $sServiceUser
; Specify an empty string if the account has no password or if the service
; runs in the LocalService, NetworkService, or LocalSystem account
; $nServiceType - [optional] default is $SERVICE_WIN32_OWN_PROCESS
; $nStartType - [optional] default is $SERVICE_AUTO_START
; $nErrorType - [optional] default is $SERVICE_ERROR_NORMAL
; $nDesiredAccess - [optional] default is $SERVICE_ALL_ACCESS
; $sLoadOrderGroup - [optional] default is empty
; names the load ordering group of which this service is a member
; Requirements: Administrative rights on the computer
; Return Values: On Success - 1
; On Failure - 0 and @error is set to extended Windows error code
; Note: Dependencies cannot be specified using this function
; Refer to the CreateService page on MSDN for more information
;===============================================================================
Func _CreateService($sComputerName, _
$sServiceName, _
$sDisplayName, _
$sBinaryPath, _
$sServiceUser = "LocalSystem", _
$sPassword = "", _
$nServiceType = 0x00000010, _
$nStartType = 0x00000002, _
$nErrorType = 0x00000001, _
$nDesiredAccess = 0x000f01ff, _
$sLoadOrderGroup = "")
Local $hAdvapi32
Local $hKernel32
Local $arRet
Local $hSC
Local $lError = -1
$hAdvapi32 = DllOpen("advapi32.dll")
If $hAdvapi32 = -1 Then Return 0
$hKernel32 = DllOpen("kernel32.dll")
If $hKernel32 = -1 Then Return 0
$arRet = DllCall($hAdvapi32, "long", "OpenSCManager", _
"str", $sComputerName, _
"str", "ServicesActive", _
"long", $SC_MANAGER_ALL_ACCESS)
If $arRet[0] = 0 Then
$arRet = DllCall($hKernel32, "long", "GetLastError")
$lError = $arRet[0]
Else
$hSC = $arRet[0]
$arRet = DllCall($hAdvapi32, "long", "OpenService", _
"long", $hSC, _
"str", $sServiceName, _
"long", $SERVICE_INTERROGATE)
If $arRet[0] = 0 Then
$arRet = DllCall($hAdvapi32, "long", "CreateService", _
"long", $hSC, _
"str", $sServiceName, _
"str", $sDisplayName, _
"long", $nDesiredAccess, _
"long", $nServiceType, _
"long", $nStartType, _
"long", $nErrorType, _
"str", $sBinaryPath, _
"str", $sLoadOrderGroup, _
"ptr", 0, _
"str", "", _
"str", $sServiceUser, _
"str", $sPassword)
If $arRet[0] = 0 Then
$arRet = DllCall($hKernel32, "long", "GetLastError")
$lError = $arRet[0]
Else
DllCall($hAdvapi32, "int", "CloseServiceHandle", "long", $arRet[0])
EndIf
Else
DllCall($hAdvapi32, "int", "CloseServiceHandle", "long", $arRet[0])
EndIf
DllCall($hAdvapi32, "int", "CloseServiceHandle", "long", $hSC)
EndIf
DllClose($hAdvapi32)
DllClose($hKernel32)
If $lError <> -1 Then
SetError($lError)
Return 0
EndIf
Return 1
EndFunc
;===============================================================================
; Description: Deletes a service on a computer
; Parameters: $sComputerName - name of the target computer. If empty, the local computer name is used
; $sServiceName - name of the service to delete
; Requirements: Administrative rights on the computer
; Return Values: On Success - 1
; On Failure - 0 and @error is set to extended Windows error code
;===============================================================================
Func _DeleteService($sComputerName, $sServiceName)
Local $hAdvapi32
Local $hKernel32
Local $arRet
Local $hSC
Local $hService
Local $lError = -1
$hAdvapi32 = DllOpen("advapi32.dll")
If $hAdvapi32 = -1 Then Return 0
$hKernel32 = DllOpen("kernel32.dll")
If $hKernel32 = -1 Then Return 0
$arRet = DllCall($hAdvapi32, "long", "OpenSCManager", _
"str", $sComputerName, _
"str", "ServicesActive", _
"long", $SC_MANAGER_ALL_ACCESS)
If $arRet[0] = 0 Then
$arRet = DllCall($hKernel32, "long", "GetLastError")
$lError = $arRet[0]
Else
$hSC = $arRet[0]
$arRet = DllCall($hAdvapi32, "long", "OpenService", _
"long", $hSC, _
"str", $sServiceName, _
"long", $SERVICE_ALL_ACCESS)
If $arRet[0] = 0 Then
$arRet = DllCall($hKernel32, "long", "GetLastError")
$lError = $arRet[0]
Else
$hService = $arRet[0]
$arRet = DllCall($hAdvapi32, "int", "DeleteService", _
"long", $hService)
If $arRet[0] = 0 Then
$arRet = DllCall($hKernel32, "long", "GetLastError")
$lError = $arRet[0]
EndIf
DllCall($hAdvapi32, "int", "CloseServiceHandle", "long", $hService)
EndIf
DllCall($hAdvapi32, "int", "CloseServiceHandle", "long", $hSC)
EndIf
DllClose($hAdvapi32)
DllClose($hKernel32)
If $lError <> -1 Then
SetError($lError)
Return 0
EndIf
Return 1
EndFunc
‎12-03-2008 06:57 PM
‎12-03-2008 12:30 AM
Experience Lansweeper with your own data. Sign up now for a 14-day free trial.
Try Now