使用文件 I/O 正确创建和运行 win32 服务

2024-02-01

我基于此编写了一个非常简单的服务应用程序代码示例 http://code.msdn.microsoft.com/windowsdesktop/CppWindowsService-cacf4948.

作为正常运行的一部分,应用程序假定在它找到的目录中或其执行路径中存在一个文件。

当我“安装”服务,然后从控制面板中的服务管理器“启动”服务时。应用程序失败,因为它找不到要打开和读取的文件(即使该文件与已安装的可执行文件位于同一目录中)。

我的问题是,当 Windows 服务运行时,预期的运行路径应该是什么?

当调用“CreateService”时,似乎只有二进制文件的路径参数,而不是执行的路径参数。有没有办法表明二进制文件应该从哪里执行?

我已经在 Windows Vista 和 Windows 7 上尝试过此操作。遇到同样的问题。


由于 Windows 服务是在与普通用户模式应用程序不同的上下文中运行的,因此最好不要对工作目录或相对路径做出任何假设。除了工作目录的差异之外,服务还可以使用完全不同的权限集等运行。

使用absolute您的服务所需的文件路径应该完全避免此问题。无论工作目录如何,绝对路径都将被解释为相同的,因此这应该使服务的工作目录无关。有几种方法可以解决这个问题:

  1. 硬编码绝对路径- 这也许是避免该问题的最简单方法,但也是最不灵活的。这种方法可能适合基本的开发和测试工作,但在其他人开始使用您的程序之前,您可能需要一些更复杂的东西。
  2. 将绝对路径存储在环境变量中- 这为您提供了额外的灵活性,因为路径现在可以设置为任意值并根据需要进行更改。由于服务可以作为具有不同环境变量集的不同用户运行,因此这种方法仍然存在一些问题。
  3. 在注册表中存储绝对路径- 这可能是最万无一失的方法了。从注册表中检索路径将为所有用户帐户提供相同的结果,而且这在安装时相对容易设置。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用文件 I/O 正确创建和运行 win32 服务 的相关文章

随机推荐