File size: 15,402 Bytes
27867f1 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 |
NSIS Simple Service Plugin This plugin contains basic service functions like start, stop the service or checking the service status. It also contains advanced service functions for example setting the service description, changed the logon account, granting or removing the service logon privilege. == Short Reference == SimpleSC::InstallService [name_of_service] [display_name] [service_type] [start_type] [binary_path] [dependencies] [account] [password] SimpleSC::RemoveService [name_of_service] SimpleSC::StartService [name_of_service] [arguments] [timeout] SimpleSC::StopService [name_of_service] [wait_for_file_release] [timeout] SimpleSC::PauseService [name_of_service] [timeout] SimpleSC::ContinueService [name_of_service] [timeout] SimpleSC::RestartService [name_of_service] [arguments] [timeout] SimpleSC::ExistsService [name_of_service] SimpleSC::GetServiceDisplayName [name_of_service] SimpleSC::GetServiceName [display_name] SimpleSC::GetServiceStatus [name_of_service] SimpleSC::GetServiceDescription [name_of_service] SimpleSC::GetServiceStartType [name_of_service] SimpleSC::GetServiceBinaryPath [name_of_service] SimpleSC::GetServiceLogon [name_of_service] SimpleSC::GetServiceFailure [name_of_service] SimpleSC::GetServiceFailureFlag [name_of_service] SimpleSC::GetServiceDelayedAutoStartInfo [name_of_service] SimpleSC::SetServiceDescription [name_of_service] [service_description] SimpleSC::SetServiceStartType [name_of_service] [start_type] SimpleSC::SetServiceBinaryPath [name_of_service] [binary_path] SimpleSC::SetServiceLogon [name_of_service] [account] [password] SimpleSC::SetServiceFailure [name_of_service] [reset_period] [reboot_message] [command] [action_type_1] [action_delay_1] [action_type_2] [action_delay_2] [action_type_3] [action_delay_3] SimpleSC::SetServiceFailureFlag [name_of_service] [failure_actions_on_non_crash_failures] SimpleSC::SetServiceDelayedAutoStartInfo [name_of_service] [delayed_autostart] SimpleSC::GrantServiceLogonPrivilege [account] SimpleSC::RemoveServiceLogonPrivilege [account] SimpleSC::ServiceIsPaused [name_of_service] SimpleSC::ServiceIsRunning [name_of_service] SimpleSC::ServiceIsStopped [name_of_service] SimpleSC::GetErrorMessage [error_code] Parameters: name_of_service - The name of the service used for Start/Stop commands and all further commands display_name - The name as shown in the service control manager applet in system control service_type - One of the following codes 1 - SERVICE_KERNEL_DRIVER - Driver service. 2 - SERVICE_FILE_SYSTEM_DRIVER - File system driver service. 16 - SERVICE_WIN32_OWN_PROCESS - Service that runs in its own process. (Should be used in most cases) 32 - SERVICE_WIN32_SHARE_PROCESS - Service that shares a process with one or more other services. 256 - SERVICE_INTERACTIVE_PROCESS - The service can interact with the desktop. Note: If you specify either SERVICE_WIN32_OWN_PROCESS or SERVICE_WIN32_SHARE_PROCESS, and the service is running in the context of the LocalSystem account, you can also specify this value. Example: SERVICE_WIN32_OWN_PROCESS or SERVICE_INTERACTIVE_PROCESS - (16 or 256) = 272 Note: Services cannot directly interact with a user as of Windows Vista. Therefore, this technique should not be used in new code. See for more information: http://msdn2.microsoft.com/en-us/library/ms683502(VS.85).aspx start_type - one of the following codes 0 - SERVICE_BOOT_START - Driver boot stage start 1 - SERVICE_SYSTEM_START - Driver scm stage start 2 - SERVICE_AUTO_START - Service auto start (Should be used in most cases) 3 - SERVICE_DEMAND_START - Driver/service manual start 4 - SERVICE_DISABLED - Driver/service disabled service_status - one of the following codes 1 - SERVICE_STOPPED 2 - SERVICE_START_PENDING 3 - SERVICE_STOP_PENDING 4 - SERVICE_RUNNING 5 - SERVICE_CONTINUE_PENDING 6 - SERVICE_PAUSE_PENDING 7 - SERVICE_PAUSED binary_path - The path to the binary including all necessary parameters dependencies - Needed services, controls which services have to be started before this one; use the forward slash "/" to add more more than one service account - The username/account which should be used password - Password of the aforementioned account to be able to logon as a service Note: If you do not specify account/password, the local system account will be used to run the service arguments - Arguments passed to the service main function. Note: Driver services do not receive these arguments. reset_period - The time after which to reset the failure count to zero if there are no failures, in seconds. Specify 0 (INFINITE) to indicate that this value should never be reset reboot_message - The message to be broadcast to server users before rebooting command - The command line of the process to execute in response to the SC_ACTION_RUN_COMMAND service controller action. This process runs under the same account as the service timeout - Timeout in seconds of the function action_type_x - one of the following codes for the action to be performed 0 - SC_ACTION_NONE - No action 1 - SC_ACTION_RESTART - Restart the service 2 - SC_ACTION_REBOOT - Reboot the computer (Note: The service user must have the SE_SHUTDOWN_NAME privilege) 3 - SC_ACTION_RUN_COMMAND - Run a command action_delay_x - The time to wait before performing the specified action, in milliseconds failure_actions_on_non_crash_failures - This setting determines when failure actions are to be executed 0 - The failure actions executed only if the service terminates without reporting a status of SERVICE_STOPPED 1 - The failure actions executed if the status of a service is SERVICE_STOPPED but the exit code of the service is not 0 delayed_autostart - The delayed auto-start setting of an auto-start service 0 - The service will be started during system boot. 1 - The service will be started after other auto-start services are started plus a short delay error_code - Error code of a function service_description - The description as shown in the service control manager applet in system control wait_for_file_release - Wait for file release after the service is stopped. This is useful if the binary file will be overwritten after stopping the service. 0 - NO_WAIT - No wait for file release 1 - WAIT - Wait for file release Note: If SERVICE_WIN32_OWN_PROCESS is used this option should be set to WAIT. If SERVICE_WIN32_SHARE_PROCESS is used this option should only be set to WAIT if the last service in the process is stopped. == The Sample Script == ; Install a service - ServiceType own process - StartType automatic - NoDependencies - Logon as System Account SimpleSC::InstallService "MyService" "My Service Display Name" "16" "2" "C:\MyPath\MyService.exe" "" "" "" Pop $0 ; returns an errorcode (<>0) otherwise success (0) ; Install a service - ServiceType interact with desktop - StartType automatic - Dependencies on "Windows Time Service" (w32time) and "WWW Publishing Service" (w3svc) - Logon as System Account SimpleSC::InstallService "MyService" "My Service Display Name" "272" "2" "C:\MyPath\MyService.exe" "w32time/w3svc" "" "" Pop $0 ; returns an errorcode (<>0) otherwise success (0) ; Remove a service SimpleSC::RemoveService "MyService" Pop $0 ; returns an errorcode (<>0) otherwise success (0) ; Start a service SimpleSC::StartService "MyService" "" 30 Pop $0 ; returns an errorcode (<>0) otherwise success (0) ; Start a service with two arguments "/param1=true" "/param2=1" SimpleSC::StartService "MyService" "/param1=true /param2=1" 30 Pop $0 ; returns an errorcode (<>0) otherwise success (0) ; Start a service with two arguments "-p param1" "-param2" SimpleSC::StartService "MyService" '"-p param1" -param2' 30 Pop $0 ; returns an errorcode (<>0) otherwise success (0) ; Stop a service and waits for file release SimpleSC::StopService "MyService" 1 30 Pop $0 ; returns an errorcode (<>0) otherwise success (0) ; Stops two services and waits for file release after the last service is stopped SimpleSC::StopService "MyService1" 0 30 Pop $0 ; returns an errorcode (<>0) otherwise success (0) SimpleSC::StopService "MyService2" 1 30 Pop $0 ; returns an errorcode (<>0) otherwise success (0) ; Pause a service SimpleSC::PauseService "MyService" 30 Pop $0 ; returns an errorcode (<>0) otherwise success (0) ; Continue a service SimpleSC::ContinueService "MyService" 30 Pop $0 ; returns an errorcode (<>0) otherwise success (0) ; Restart a service SimpleSC::RestartService "MyService" "" 30 Pop $0 ; returns an errorcode (<>0) otherwise success (0) ; Restart a service with two arguments "/param1=true" "/param2=1" SimpleSC::RestartService "MyService" "/param1=true /param2=1" 30 Pop $0 ; returns an errorcode (<>0) otherwise success (0) ; Start a service with two arguments "-p param1" "-param2" SimpleSC::RestartService "MyService" '"-p param1" -param2' 30 Pop $0 ; returns an errorcode (<>0) otherwise success (0) ; Check if the service exists SimpleSC::ExistsService "MyService" Pop $0 ; returns an errorcode if the service doesn�t exists (<>0)/service exists (0) ; Get the displayname of a service SimpleSC::GetServiceDisplayName "MyService" Pop $0 ; returns an errorcode (<>0) otherwise success (0) Pop $1 ; returns the displayname of the service ; Get the servicename of a service by the displayname SimpleSC::GetServiceName "MyService" Pop $0 ; returns an errorcode (<>0) otherwise success (0) Pop $1 ; returns the servicename of the service ; Get the current status of a service SimpleSC::GetServiceStatus "MyService" Pop $0 ; returns an errorcode (<>0) otherwise success (0) Pop $1 ; return the status of the service (See "service_status" in the parameters) ; Get the description of a service SimpleSC::GetServiceDescription "MyService" Pop $0 ; returns an errorcode (<>0) otherwise success (0) Pop $1 ; returns the description of the service ; Get the start type of the service SimpleSC::GetServiceStartType "MyService" Pop $0 ; returns an errorcode (<>0) otherwise success (0) Pop $1 ; returns the start type of the service (see "start_type" in the parameters) ; Get the binary path of a service SimpleSC::GetServiceBinaryPath "MyService" Pop $0 ; returns an errorcode (<>0) otherwise success (0) Pop $1 ; returns the binary path of the service ; Get the logon user of the service SimpleSC::GetServiceLogon "MyService" Pop $0 ; returns an errorcode (<>0) otherwise success (0) Pop $1 ; returns the logon username of the service ; Get the failure configuration of a service SimpleSC::GetServiceFailure "MyService" Pop $0 ; returns an errorcode (<>0) otherwise success (0) Pop $1 ; returns the reset period Pop $2 ; returns the reboot message Pop $3 ; returns the command Pop $4 ; returns the first action (See "action_type_x" in the parameters) Pop $5 ; returns the first action delay Pop $6 ; returns the second action (See "action_type_x" in the parameters) Pop $7 ; returns the second action delay Pop $8 ; returns the third action (See "action_type_x" in the parameters) Pop $9 ; returns the third action delay ; Get the failure flag configuration of a service SimpleSC::GetServiceFailureFlag "MyService" Pop $0 ; returns an errorcode (<>0) otherwise success (0) Pop $1 ; returns the service flag ; Get the delayed auto-start configuration of a service SimpleSC::GetServiceDelayedAutoStartInfo "MyService" Pop $0 ; returns an errorcode (<>0) otherwise success (0) Pop $1 ; returns the delayed auto-start configuration ; Set the description of a service SimpleSC::SetServiceDescription "MyService" "Sample Description" Pop $0 ; returns an errorcode (<>0) otherwise success (0) ; Set the starttype to automatic of a service SimpleSC::SetServiceStartType "MyService" "2" Pop $0 ; returns an errorcode (<>0) otherwise success (0) ; Sets the service binary path SimpleSC::SetServiceBinaryPath "MyService" "C:\MySoftware\MyService.exe" Pop $0 ; returns an errorcode (<>0) otherwise success (0) ; Sets the service logon to a user and grant the user the "SeServiceLogonPrivilege" SimpleSC::SetServiceLogon "MyService" "MyServiceUser" "MyServiceUserPassword" Pop $0 ; returns an errorcode (<>0) otherwise success (0) IntCmp $0 0 +1 Done Done ; If successful grant the service logon privilege to "MyServiceUser" ; Note: Every serviceuser must have the ServiceLogonPrivilege to start the service SimpleSC::GrantServiceLogonPrivilege "MyServiceUser" Pop $0 ; returns an errorcode (<>0) otherwise success (0) Done: ; Sets the service failure configuration - First action: Restart the service after one minute - Second action: Reboot the computer after five minutes SimpleSC::SetServiceFailure "MyService" "0" "" "" "1" "60000" "2" "300000" "0" "0" Pop $0 ; returns an errorcode (<>0) otherwise success (0) ; Sets the failure flag configuration of a service SimpleSC::SetServiceFailureFlag "MyService" "1" Pop $0 ; returns an errorcode (<>0) otherwise success (0) ; Sets the delayed auto-start configuration of a service SimpleSC::SetServiceDelayedAutoStartInfo "MyService" "1" Pop $0 ; returns an errorcode (<>0) otherwise success (0) ; Remove the "SeServiceLogonPrivilege" from a user SimpleSC::RemoveServiceLogonPrivilege "MyServiceUser" Pop $0 ; returns an errorcode (<>0) otherwise success (0) ; Check if the service is paused SimpleSC::ServiceIsPaused "MyService" Pop $0 ; returns an errorcode (<>0) otherwise success (0) Pop $1 ; returns 1 (service is paused) - returns 0 (service is not paused) ; Check if the service is running SimpleSC::ServiceIsRunning "MyService" Pop $0 ; returns an errorcode (<>0) otherwise success (0) Pop $1 ; returns 1 (service is running) - returns 0 (service is not running) ; Check if the service is stopped SimpleSC::ServiceIsStopped "MyService" Pop $0 ; returns an errorcode (<>0) otherwise success (0) Pop $1 ; returns 1 (service is stopped) - returns 0 (service is not stopped) ; Show the error message if a function fails SimpleSC::StopService "MyService" 1 30 Pop $0 ; returns an errorcode (<>0) otherwise success (0) IntCmp $0 0 Done +1 +1 Push $0 SimpleSC::GetErrorMessage Pop $0 MessageBox MB_OK|MB_ICONSTOP "Stopping fails - Reason: $0" Done: == Important Notes == - The function "SetServiceLogon" only works if the servicetype is "SERVICE_WIN32_OWN_PROCESS". - The functions "GetServiceDescription", "SetServiceDescription", "GetServiceFailure" and "SetServiceFailure" are only available on systems higher than Windows NT. - The function "GetServiceFailureFlag", "SetServiceFailureFlag", "GetServiceDelayedAutoStartInfo" and "SetServiceDelayedAutoStartInfo" are only available on systems higher than Windows 2003. - If you change the logon of an service to a new user you have to grant him the Service Logon Privilege. Otherwise the service cannot be started by the user you have assigned. - The functions StartService, StopService, PauseService and ContinueService uses a timeout of 30 seconds. This means the function must be executed within 30 seconds, otherwise the functions will return an error. |