installjammer

Artifact [d18c51fa55]
aplsimple | Login

Artifact d18c51fa55a5250924b164291fc6d77cf77efdbf5ff544a037120dd81123ec13:


## $Id$
##
## BEGIN LICENSE BLOCK
##
## Copyright (C) 2002  Damon Courtney
## 
## This program is free software; you can redistribute it and/or
## modify it under the terms of the GNU General Public License
## version 2 as published by the Free Software Foundation.
## 
## This program is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
## GNU General Public License version 2 for more details.
## 
## You should have received a copy of the GNU General Public License
## along with this program; if not, write to the
##     Free Software Foundation, Inc.
##     51 Franklin Street, Fifth Floor
##     Boston, MA  02110-1301, USA.
##
## END LICENSE BLOCK

Condition WindowsServiceTestCondition

Property Database short "Database"
Property ServiceName short "Service Name"
Property System short "System"
Property Operator choice "Operator" "exists" \
  {"exists" "does not exist" "is paused" "is running" "is stopped"}

proc ::InstallJammer::conditions::WindowsServiceTestCondition { obj } {
    $obj properties props -subst 1

    set service $props(ServiceName)
    if {[catch { twapi::get_service_internal_name $service } service]} {
    	if {$props(Operator) eq "does not exist"} { return 1 }
	return 0
    }

    set opts [list]
    if {$props(System) ne ""} { lappend opts -system $props(System) }
    if {$props(Database) ne ""} { lappend opts -database $props(Database) }

    switch -- $props(Operator) {
        "exists" - "does not exist" {
            set exists [eval [list twapi::service_exists $service] $opts]
            if {$props(Operator) eq "exists"} {
                return $exists
            } else {
                return [expr {!$exists}]
            }
        }

        "is paused" - "is running" - "is stopped" {
            array set s [eval [list twapi::get_service_status $service] $opts]
            return [string equal $s(state) [lindex $props(Operator) 1]]
        }
    }
}