gpt4 book ai didi

c - Windows 服务 C

转载 作者:可可西里 更新时间:2023-11-01 11:21:36 24 4
gpt4 key购买 nike

我已经用 C 语言编写了一个 Windows 服务,但是缺少关于用这种语言编写服务的文档意味着我有一些事情需要帮助。

  1. 我想创建一个配置文件,服务会读取该配置文件以获取一些设置/选项。我想知道最好的方法是什么以及如何去做。服务 .exe 将与其他文件/程序一起安装在用户指定的位置。我的第一个问题是,我应该将此配置文件保存在与服务 .exe 相同的目录中,还是应该将其放在我为我的程序创建的 %appdata% 文件夹中?

  2. 服务如何找到配置文件。我应该将配置文件的位置存储在注册表中并将注册表项硬编码到服务中吗?或者是否可以安装该服务,使其将配置文件路径作为默认命令行参数?或者我应该将我的配置文件保存在与服务 .exe 相同的文件夹中并使用注册表 HKLM/System/CurrentControlSet/Services/<servicename>/ImagePath ?

  3. 我有以下代码:

void main() {
SERVICE_TABLE_ENTRY ServiceTable[2];
ServiceTable[0].lpServiceName = L"Service Name";
ServiceTable[0].lpServiceProc = (LPSERVICE_MAIN_FUNCTION)ServiceMain;
ServiceTable[1].lpServiceName = NULL;
ServiceTable[1].lpServiceProc = NULL;
// Start the control dispatcher thread for our service
StartServiceCtrlDispatcher(ServiceTable);
}
void ServiceMain(int argc, char** argv) {
//stuff here
}

ServiceMain 从哪里获取其命令行参数,是特定服务属性下的“启动参数:”框吗?是否可以使用一些默认参数安装它?是否可以在以后以编程方式添加一些内容?

  1. 是否可以让我的服务在另一个服务启动时有条件地启动?

  2. 如何在生产环境中安装此服务?我一直在使用 Windows SDK 中的 sc 进行开发,但这在生产中不起作用。这样做的唯一方法是确保安装了 microsoft .net 框架,然后运行 ​​installutil 程序吗?我的服务是在没有使用 .net 框架的情况下编写的,所以我希望有一种方法可以在不安装 .net 的情况下安装服务

奖励问题:我的服务输出到日志文件。它是否可以检查文件有多大并在超过任意文件大小时将其删除?

PS 我不知道为什么列表在代码后重置为 1 和 2,它在编辑框中清楚地写着 4 和 5。

最佳答案

  1. 由于服务是针对机器范围而不是针对每个用户的,因此将配置文件存储在 CSIDL_COMMON_APPDATA 下.
  2. 调用SHGetFolderPath传递 CSIDL_COMMON_APPDATA 以找出该文件夹的位置。
  3. 命令行参数 argv 来自注册服务时指定的命令行。这是您可以从服务控制管理器中看到的内容。

我还没有回答第二组问题。你真的应该一次只问一个问题。不过,我确实对安装服务有所了解。您当然不需要任何 .net。具体应该如何操作可能取决于您使用的安装工具。

关于c - Windows 服务 C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7734763/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com