Deskflow 1.22.0.197
Keyboard and mouse sharing utility
Loading...
Searching...
No Matches
ArchDaemonWindows Class Reference

Win32 implementation of IArchDaemon. More...

#include <ArchDaemonWindows.h>

Inheritance diagram for ArchDaemonWindows:
Collaboration diagram for ArchDaemonWindows:

Public Types

using RunFunc = std::function<int()>
Public Types inherited from IArchDaemon
using DaemonFunc = std::function<int(int, const char **)>

Public Member Functions

 ArchDaemonWindows ()
 ~ArchDaemonWindows () override=default
void installDaemon (const char *name, const char *description, const char *pathname, const char *commandLine, const char *dependencies) override
 Install daemon.
void uninstallDaemon (const char *name) override
 Uninstall daemon.
void installDaemon () override
 Install daemon.
void uninstallDaemon () override
 Uninstall daemon.
int daemonize (const char *name, DaemonFunc const &func) override
 Daemonize the process.
bool canInstallDaemon (const char *name) override
 Check if user has permission to install the daemon.
bool isDaemonInstalled (const char *name) override
 Check if the daemon is installed.
std::string commandLine () const override
 Get the command line.
Public Member Functions inherited from IArchDaemon
Public Member Functions inherited from IInterface
virtual ~IInterface ()=default
 Interface destructor does nothing.

Static Public Member Functions

static int runDaemon (RunFunc runFunc)
 Run the daemon.
static void daemonRunning (bool running)
 Indicate daemon is in main loop.
static void daemonFailed (int result)
 Indicate failure of running daemon.
static UINT getDaemonQuitMessage ()
 Get daemon quit message.

Detailed Description

Win32 implementation of IArchDaemon.

Member Typedef Documentation

◆ RunFunc

using ArchDaemonWindows::RunFunc = std::function<int()>

Constructor & Destructor Documentation

◆ ArchDaemonWindows()

ArchDaemonWindows::ArchDaemonWindows ( )

◆ ~ArchDaemonWindows()

ArchDaemonWindows::~ArchDaemonWindows ( )
overridedefault

Member Function Documentation

◆ canInstallDaemon()

bool ArchDaemonWindows::canInstallDaemon ( const char * name)
overridevirtual

Check if user has permission to install the daemon.

Returns true iff the caller has permission to install or uninstall the daemon. Note that even if this method returns true it's possible that installing/uninstalling the service may still fail. This method ignores whether or not the service is already installed.

Implements IArchDaemon.

◆ commandLine()

std::string ArchDaemonWindows::commandLine ( ) const
inlineoverridevirtual

Get the command line.

Gets the command line with which the application was started.

Implements IArchDaemon.

◆ daemonFailed()

void ArchDaemonWindows::daemonFailed ( int result)
static

Indicate failure of running daemon.

The runFunc passed to runDaemon() should call this function to indicate failure. result is returned by daemonize().

◆ daemonize()

int ArchDaemonWindows::daemonize ( const char * name,
DaemonFunc const & func )
overridevirtual

Daemonize the process.

Daemonize. Throw XArchDaemonFailed on error. name is the name of the daemon. Once daemonized, func is invoked and daemonize returns when and what it does.

Exactly what happens when daemonizing depends on the platform.

  • unix: Detaches from terminal. func gets passed one argument, the name passed to daemonize().
  • win32: Becomes a service. Argument 0 is the name of the service and the rest are the arguments passed to StartService(). func is only called when the service is actually started. func must call ArchMiscWindows::runDaemon() to finally becoming a service. The runFunc function passed to runDaemon() must call ArchMiscWindows::daemonRunning(true) when it enters the main loop (i.e. after initialization) and ArchMiscWindows::daemonRunning(false) when it leaves the main loop. The stopFunc function passed to runDaemon() is called when the daemon must exit the main loop and it must cause runFunc to return. func should return what runDaemon() returns. func or runFunc can call ArchMiscWindows::daemonFailed() to indicate startup failure.

Implements IArchDaemon.

◆ daemonRunning()

void ArchDaemonWindows::daemonRunning ( bool running)
static

Indicate daemon is in main loop.

The runFunc passed to runDaemon() should call this function to indicate when it has entered (running is true) or exited (running is false) the main loop.

◆ getDaemonQuitMessage()

UINT ArchDaemonWindows::getDaemonQuitMessage ( )
static

Get daemon quit message.

The windows NT daemon tells daemon thread to exit by posting this message to it. The thread must, of course, have a message queue for this to work.

◆ installDaemon() [1/2]

void ArchDaemonWindows::installDaemon ( )
overridevirtual

Install daemon.

Installs the default daemon.

Implements IArchDaemon.

◆ installDaemon() [2/2]

void ArchDaemonWindows::installDaemon ( const char * name,
const char * description,
const char * pathname,
const char * commandLine,
const char * dependencies )
overridevirtual

Install daemon.

Install a daemon. name is the name of the daemon passed to the system and description is a short human readable description of the daemon. pathname is the path to the daemon executable. commandLine should not include the name of program as the first argument. If allUsers is true then the daemon will be installed to start at boot time, otherwise it will be installed to start when the current user logs in. If dependencies is not nullptr then it's a concatenation of NUL terminated other daemon names followed by a NUL; the daemon will be configured to startup after the listed daemons. Throws an XArchDaemon exception on failure.

Implements IArchDaemon.

◆ isDaemonInstalled()

bool ArchDaemonWindows::isDaemonInstalled ( const char * name)
overridevirtual

Check if the daemon is installed.

Returns true iff the daemon is installed.

Implements IArchDaemon.

◆ runDaemon()

int ArchDaemonWindows::runDaemon ( RunFunc runFunc)
static

Run the daemon.

When the client calls daemonize(), the DaemonFunc should call this function after initialization and argument parsing to perform the daemon processing. The runFunc should perform the daemon's main loop, calling daemonRunning(true) when it enters the main loop (i.e. after initialization) and daemonRunning(false) when it leaves the main loop. The runFunc is called in a new thread and when the daemon must exit the main loop due to some external control the getDaemonQuitMessage() is posted to the thread. This function returns what runFunc returns. runFunc should call daemonFailed() if the daemon fails.

◆ uninstallDaemon() [1/2]

void ArchDaemonWindows::uninstallDaemon ( )
overridevirtual

Uninstall daemon.

Uninstalls the default daemon.

Implements IArchDaemon.

◆ uninstallDaemon() [2/2]

void ArchDaemonWindows::uninstallDaemon ( const char * name)
overridevirtual

Uninstall daemon.

Uninstall a daemon. Throws an XArchDaemon on failure.

Implements IArchDaemon.


The documentation for this class was generated from the following files: