如何使用C#findWindows服务的安装目录?

我很确定,使用InstallUtil.exe安装Windows服务时,它的C:\ winnt(或类似的)作为其工作目录。 有什么方法可以访问,或以其他方式捕获(在安装时)服务最初安装的目录? 目前我手动input到app.exe.config文件,但这是可怕的手动,感觉像一个黑客攻击。

有没有一个编程的方式,无论是在运行时间或安装时间,以确定服务的安装位置?

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

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

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

我不会试图改变这个过程的工作目录,但是如果这个过程有令人讨厌的副作用的话,我也不会感到惊讶,如果你真的被允许的话。

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

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

虽然很晚,但可能会有所帮助。 我通过使用AppDomain.CurrentDomain.BaseDirectory解决了这个问题

 string someFilePath = AppDomain.CurrentDomain.BaseDirectory + @"\Resources\SomeResource.xml"; 

AppDomain.CurrentDomain.BaseDirectory提供了Windows服务实际安装的目录,而不是C:\ Windows \ system32 \路径。

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

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

覆盖它,将其添加到您的项目的Installers的列表,并获得您需要的任何信息。