我在c#.Net 4.0中创建了一个Windows服务。
在VS中它运行良好,我已经构建了项目并安装了exe作为运行的服务。
我发现当作为服务运行时,应用程序不会引用我放在与服务exe相同的目录中的应用程序配置文件。
如果我在代码中强烈输入完整的文件路径没有问题,但这不是一个理想的解决方案,因为用户可以随时随地安装。
如何让应用程序引用(查找)EXE本地文件,而不是假设.Net服务包装器所在的位置。
谷歌似乎没有任何帮助。
实施例
工作:
var config =
ClassLib.XmlInterface.DeserializeConfiguration(
"C:\\Users\\Damo\\Documents\\Visual Studio 2010\\Projects\\FileDownloadService\\FileDownloadService\\bin\\Debug\\config.xml");
不起作用:(争议是EXE的当地争议)
var config =
ClassLib.XmlInterface.DeserializeConfiguration(
"config.xml");
答案 0 :(得分:0)
有几种方法可以解决这个问题。
您可以创建一个环境变量,并从中读取路径。如果您没有安装应用程序,这种情况很糟糕,如果用户使用他们的设置,它很容易破损。但如果你正确地做到了,它就会奏效。
如果您有一个安装应用程序,您还可以在注册表中存储可执行文件的路径,并在运行时读取它。
或者,您可以尝试使用以下内容检索程序集的路径:
public static string GetCoreAssemblyPathRoot()
{
const string AssemblyName = "MyAssemblyName,";
var loadedAssemblies = AppDomain.CurrentDomain.GetAssemblies();
var path = (from assembly in loadedAssemblies
where assembly.FullName.StartsWith(AssemblyName)
select Path.GetDirectoryName(assembly.Location))
.FirstOrDefault();
if (path == null)
{
return null;
}
// The last part of the path is "\bin". Remove it, and return the remainder.
var index = path.IndexOf("\\bin\\");
return index == -1
? path
: path.Substring(0, index);
}