我很确定,使用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
的列表,并获得您需要的任何信息。