private void cmdRunBackup_Click(object sender, EventArgs e)
{
try
{
const int ExecuteBackupNow = 128;
var service = new ServiceController("yourServiceNameHere");
if (service != null)
{
service.ExecuteCommand(ExecuteBackupNow);
msgUtil.Information("Started backup command!");
}
else
msgUtil.Failure("The service is not available!");
}
catch (Exception ex)
{
_logger.Error(......);
}
} // end class
2条答案
按热度按时间bogh5gae1#
Window服务是从ServiceBase派生的类。此基类允许服务代码重写OnCustomCommand方法。
例如,您可以在服务的主类中包含这样的内容
现在,UI代码可以在使用System.ServiceProcess命名空间从ServiceController类获取服务示例后调用此CustomCommand
但是,据我所知,没有办法将字符串传递给这个方法,但当然可以将字符串存储在磁盘文件的某个地方,然后触发服务上的相应命令来读取字符串或其他需要传递的参数。
如果需要更复杂的上下文,您可以始终使用host a WCF service inside the Windows Service itself。这是一个更复杂的解决方案,我建议您将所需的工作量与基于简单文件的解决方案进行比较。
mrwjdhj32#
我目前正在做的工作是让我的桌面应用程序使用以下命令将字符串值写入CommonApplicationData特殊文件夹中的文件:
然后,我的Windows服务使用相同的方法查找该文件及其值。
CommonApplicationData是一个目录,用作所有用户(包括SYSTEM帐户)使用的应用程序特定数据的公共存储库。
如需详细信息,请参阅Environment.GetFolderPath Method和Environment.SpecialFolder中的CommonApplicationData。