C# 安装Windows服务并设置非标准密钥/值

C# 安装Windows服务并设置非标准密钥/值,c#,winapi,service,C#,Winapi,Service,我有一个服务,它在映像路径上获取一些参数 例如: 是否可以通过任何特定功能存储服务的非标准值? 我想将-arg1=123和-arg2=234存储为服务的值 我知道服务是通过HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services中的键来描述的,但我不知道直接向注册表项添加值是否是一个好主意。我不确定这是否会影响将服务加载到服务数据库,或者是否有其他方法 我希望存储的示例密钥: 姓名:arg1 类型:REG_SZ 数据:arg1=123 我甚至不确定

我有一个服务,它在映像路径上获取一些参数

例如:

是否可以通过任何特定功能存储服务的非标准值? 我想将-arg1=123和-arg2=234存储为服务的值

我知道服务是通过HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services中的键来描述的,但我不知道直接向注册表项添加值是否是一个好主意。我不确定这是否会影响将服务加载到服务数据库,或者是否有其他方法

我希望存储的示例密钥:

姓名:arg1

类型:REG_SZ

数据:arg1=123

我甚至不确定这样存储值是否是最佳实践,但我们需要单独存储映像路径上提供的命令行参数


我有一个SCManager的句柄,安装/删除服务是可以的,通过设置描述也是可以的,但是如果可能的话,我想在不手动修改注册表的情况下存储一些其他值。

我真的不明白你在问什么。您可以在注册服务时指定任意命令行。是什么阻止您提供所需的参数?这些是动态值吗?注册服务时,映像路径上提供了命令行值。我也希望单独存储它们,而不是在查询或更改服务时从路径上解析它们。这种情况经常发生。通常将服务参数放在命令行或HKLM\SYSTEM\CurrentControlSet\services\\parameters\或HKLM\SOFTWARE\\中。对于后两个,您必须自己调用注册表函数。此外,上面的命令行还有一个bug。路径必须与参数分开引用,即使用C样式转义\C:\\Program Files x86\\SomeApp\\ServiceApp.exe \-arg1=123-arg2=234。您应该存储这些值一次,并且只能存储一次。把它们放在哪里并不重要。重要的是不要多次存储它们。干燥原理。一旦您多次存储它们,它们就有失去同步的风险。
ImagePath = "C:\Program Files (x86)\SomeApp\ServiceApp.exe -arg1=123 -arg2=234"