我写了一个C#Windows服务来处理我们的应用程序的任务调度。我正在尝试将“业务规则”程序集移动到计划应用程序的bin子目录中,以便我们更容易进行更新(停止服务,删除bin文件夹中的所有文件,替换为新文件,启动服务)。 / p>
我添加了
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<probing privatePath="bin;"/>
</assemblyBinding>
</runtime>
到服务的app配置,如果服务作为控制台应用程序运行,它可以正常工作。问题是当服务作为Windows服务运行时它不起作用。看来,当windows运行服务时,app配置文件会被正确读取,但是服务就像在c:\ windows \ system32中一样执行,而不是实际的EXE位置,并且会产生粗糙的效果。
我们有很多程序集,所以我真的不想使用GAC或<codeBase>
。是否有可能让EXE将其基本目录更改回其作为服务运行时的位置?
答案 0 :(得分:1)
原来我错了。 privatePath即使从Windows服务也能正常工作。问题是我已将<runtime>
部分添加到app.config的顶部,这会引发错误,因为<configSections>
不是文件中的第一项。然而,该服务仍然表示它开始正常(我们必须修复),并且用于启动错误的日志文件被写入除EXE之外的目录(我们必须修复的东西)一旦我移动了<runtime>
阻止app.config中的正确位置一切正常。
对fuslogvw.exe的评论表示赞赏,如果可以,我会给你答案。它让我看到privatePath被跟踪,错误发生在其他地方。
答案 1 :(得分:0)
使用完全限定的路径。如果您在作为服务运行时没有完全限定它,那么您在system32中寻找bin是正确的。