Windows Service获取运行目录的方法

一般获取目录方法:

首先要弄清你对“当前目录”(Current Directory)的定义是什么。

◆工作目录
你的应用程序正在哪个目录下工作。这个目录并不一定是EXE文件所在的目录,而且在程序运行中是可以改变的。


System.IO.Directory类提供了GetCurrentDirectory方法,该方法是对Win32 API的GetCurrentDirectory函数的一个封装。
此外,System.Environment类提供了CurrentDirectory属性,由于该属性内部调用的就是System.IO.Directory.GetCurrentDirectory(),因此

二者是等价的。

最后还有一个方法:
System.IO.Path.GetFullPath(".\\")

◆被执行的EXE文件所在的目录。
如果是WinForm,可以使用System.Windows.Forms.Application类提供的StartupPath属性。


作为Window服务的程序获取目录应该使用:AppDomain.CurrentDomain.BaseDirectory
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你可以使用 Windows API 来获取 Windows 服务的运行状态,具体步骤如下: 1. 使用 OpenSCManager 函数打开服务控制管理器数据库,获取 SC_HANDLE。 2. 使用 OpenService 函数打开指定的服务,获取 SC_HANDLE。 3. 使用 QueryServiceStatus 函数获取服务的当前状态,获取 SERVICE_STATUS 结构体。 4. 根据 SERVICE_STATUS 结构体中的 dwCurrentState 字段判断服务的运行状态。 5. 使用 CloseServiceHandle 函数关闭 SC_HANDLE。 以下是获取服务运行状态的 C++ 代码示例: ```c++ #include <windows.h> int main() { SC_HANDLE scm_handle = OpenSCManager(nullptr, nullptr, SC_MANAGER_CONNECT); if (scm_handle == nullptr) { // 处理打开 SC_MANAGER 失败的情况 return -1; } SC_HANDLE svc_handle = OpenService(scm_handle, "服务名称", SERVICE_QUERY_STATUS); if (svc_handle == nullptr) { // 处理打开服务失败的情况 CloseServiceHandle(scm_handle); return -1; } SERVICE_STATUS svc_status; if (!QueryServiceStatus(svc_handle, &svc_status)) { // 处理获取服务状态失败的情况 CloseServiceHandle(svc_handle); CloseServiceHandle(scm_handle); return -1; } if (svc_status.dwCurrentState == SERVICE_RUNNING) { // 处理服务正在运行的情况 } else if (svc_status.dwCurrentState == SERVICE_STOPPED) { // 处理服务已停止的情况 } else { // 处理其他状态的情况 } CloseServiceHandle(svc_handle); CloseServiceHandle(scm_handle); return 0; } ``` 需要注意,需要管理员权限才能获取服务的状态。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值