向mono-service传递命令行参数

3
有没有办法将命令行参数传递给通过mono-service调用的服务?所有命令行参数似乎都被mono-service吸收而不是传递给服务。

你是否正在使用带有Main方法的Assembly?你应该已经能够从那里“捕获”命令行参数,但如果这真的不是设计上的问题,请参见我的帖子中的可能修补程序。 - sehe
1个回答

2
更新:根据我在2011年底提交的补丁,现在您可以使用mono-service的预期接口。

据我所知,没有办法。

惯用的做法是使用 app.config 文件来包含 配置节(以 XML 格式)。

更新

那似乎很奇怪。 assebmblyArgs [应为 assemblyArgs] 作为 activationAttributes 的一部分传递给 AppDomain.CreateInstanceAndUnwrap 方法 (String, String, Boolean, BindingFlags, Binder, Object[], CultureInfo, Object[]),但在调用 OnStart 时被忽略了。

您可以尝试使用以下源代码编译修改过的 mono-service.exe 版本:

* 参见github gist提交以供审查

使用-r:System.ServiceProcess.dll -r:Mono.Posix.dll -unsafe编译为mono-service.exe


较旧的内容:

更新1 取消之前的说法。从代码来看,您只需要在程序集名称后面传递选项即可。

这意味着以下内容应该符合您的期望:

 mono-service -l:/root/service-lock MyService.exe /Param1 /Param2 bla.txt


我认为它们不是传递到 OnStart,而是传递到 Main。让我测试一下,然后告诉你。 - David Pfeffer
1
@DavidPfeffer:FYI,该补丁已由Miguel本人应用于Mono github。这意味着您可以期望在将来使用mono-service传递参数时会有更好的效果。 - sehe
虽然似乎没有任何文档记录,但是您可以使用 mono-service service.exe /arg1 /arg2,并将 {"/arg1", "/arg2"} 传递给 OnStartstring[] args - christianliebel
@chliebel 是的。这是有道理的,因为我的补丁已经在4年前应用了 :) 这正是补丁的目的。 - sehe
@sehe 做得好!您介意相应地更新您的答案吗?因为现在可以指定参数... :) - christianliebel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接