如何使用C#查找Windows服务的安装目录?

时间:2009-01-29 14:14:08

标签: c# windows windows-services

我很确定使用InstallUtil.exe安装时,Windows服务会将C:\ winnt(或类似)作为其工作目录。有没有办法可以访问或以其他方式捕获(在安装时)最初安装服务的目录?目前我手动将其输入到app.exe.config文件中,但这是非常可靠的手册,感觉就像是黑客。

在运行时或安装时间是否有编程方式来确定服务的安装位置?

5 个答案:

答案 0 :(得分:34)

您可以使用反射来获取正在执行的程序集的位置。这是一个简单的例程,它使用反射将工作目录设置为正在执行的程序集的位置:

String path = System.Reflection.Assembly.GetExecutingAssembly().Location;
path = System.IO.Path.GetDirectoryName(path);
Directory.SetCurrentDirectory(path);

答案 1 :(得分:7)

你的意思是你想要包含程序集的目录吗?如果是这样,那很简单:使用Assembly.Location

我不会尝试更改过程的工作目录 - 如果这有令人讨厌的副作用,我不会感到惊讶,如果确实你被允许这样做。

答案 2 :(得分:5)

我不知道Directory.SetCurrentDirectory方法。通常我会这样做:

Environment.CurrentDirectory = System.AppDomain.CurrentDomain.BaseDirectory;

答案 3 :(得分:3)

虽然很晚,但它可能对某人有所帮助。我通过使用AppDomain.CurrentDomain.BaseDirectory

解决了这个问题
string someFilePath = AppDomain.CurrentDomain.BaseDirectory + @"\Resources\SomeResource.xml";

AppDomain.CurrentDomain.BaseDirectory给出了实际安装Windows服务的目录,而不是C:\ Windows \ system32 \ path。

我后来看到@Ramon已经发布了相同的解决方案。

答案 4 :(得分:2)

InstallUtil.exe在安装时调用您应用程序的ServiceInstaller.Install()

覆盖它,将其添加到项目的Installers列表中,并获取所需的任何信息。