我需要知道一种可靠的方法,我可以确定启动Windows服务的文件夹。确定这一点的方式似乎与您在WPF applciaiton中确定它的方式不同。
更多细节(可选阅读):
我有一个嵌入式sql数据库,WPF应用程序和Windows服务都使用它。
在开发过程中,两个项目的数据库相对路径都不同,因为它们在访问同一个嵌入式数据库时从自己的调试目录运行。
现在,我正在尝试创建一个安装程序。我已将windows服务可执行文件和wpf应用程序可执行文件移动到同一根目录。
在wpf applciation中,我成功创建了一个指向嵌入式数据库的数据库连接字符串,但在Windows服务中我没有成功创建此连接字符串。
答案 0 :(得分:3)
使用Assembly.GetEntryAssembly获取主程序集。在那里,您将拥有位置属性,告诉您代码的安装位置。
请注意,服务的当前目录是c:\ windows \ system32(假设默认安装目录)。
答案 1 :(得分:3)
要获取安装Windows服务的目录,您可以使用:
private string GetExeDir()
{
System.Reflection.Assembly ass = System.Reflection.Assembly.GetExecutingAssembly();
string codeBase = System.IO.Path.GetDirectoryName(ass.CodeBase);
System.Uri uri = new Uri(codeBase);
return uri.LocalPath;
}
答案 2 :(得分:2)
我认为你是从错误的方向攻击问题。我将在配置文件中为WPF应用程序和Windows服务配置数据库的路径。然后,您的代码将使用配置文件中的路径构建连接字符串。
或者,您可以考虑使用环境变量并在安装程序中设置该环境变量。