Sådan ser du en Windows-service afhængigheder med Python?

Indlæg af Hanne Mølgaard Plasc

Problem



Ved hjælp af Windows Services-konsollen kan du se en serviceafhængighed under Egenskaber> Afhængigheder. Hvordan kan du få de samme oplysninger med Python? Er der en måde at gøre med psutil?

Bedste reference


Du kan bruge modulet subprocess til at forespørge sc.exe for at få oplysninger til din tjeneste og derefter udlede afhængighedsoplysningerne. Noget som:


import subprocess

def get\_service\_dependencies(service):
    try:
        dependencies = []  # hold our dependency list
        info = subprocess.check\_output(["sc", "qc", service], universal\_newlines=True)
        dep\_index = info.find("DEPENDENCIES")  # find the DEPENDENCIES entry
        if dep\_index != -1:  # make sure we have a dependencies entry
            for line in info[dep\_index+12:].split("
"):  # loop over the remaining lines
                entry, value = line.rsplit(":", 2)  # split each line to entry : value
                if entry.strip():  # next entry encountered, no more dependencies
                    break  # nothing more to do...
                value = value.strip()  # remove the whitespace
                if value:  # if there is a value...
                    dependencies.append(value)  # add it to the dependencies list
        return dependencies or None  # return None if there are no dependencies
    except subprocess.CalledProcessError:  # sc couldn't query this service
        raise ValueError("No such service ({})".format(service))


Så kan du let søge efter afhængigheder som:


print(get\_service\_dependencies("wudfsvc"))  # query Windows Driver Foundation service
# ['PlugPlay', 'WudfPf']