在创建DirectoryCatalog时,我遇到了MEF的问题。我有一个Windows Forms应用程序,我测试MEF功能,它没有问题。但是,当我在Windows服务中运行相同的代码时,它会挂起:
_catalog = new DirectoryCatalog(assemblyBaseDirectory);
//Here is the full code block.
var codeBaseDir = Path.GetDirectoryName(Assembly.GetExecutingAssembly().CodeBase);
if (codeBaseDir != null) {
assemblyBaseDirectory = new Uri(codeBaseDir).AbsolutePath;
Logger.Info("Creating Directory Catalog for " + assemblyBaseDirectory);
_catalog = new DirectoryCatalog(assemblyBaseDirectory);
Logger.Info("Directory Catalog created!");
}
我也没有例外。我把登录进入并发现第二个Logger.Info行永远不会被调用。
更新
当我从我的服务中调用此代码时,我确定我的路径没有返回。它将目录路径格式化为“C:/ Program%20Files / My%20Service”。我不确定为什么它不是为我的win form应用程序做这个。
答案 0 :(得分:1)
我认为您首先需要关注的是运行Windows应用程序(如您自己)和Windows服务(如同什么?)之间的区别。此外,Windows服务的启动目录是C:\Windows\System32
,svchost.exe
从哪里运行。我在使用服务时解析启动路径的方法是将调用包装到Uri
类以获取本地路径:
var path = new Uri(typeof(Something).Assembly.Location).LocalPath;
var catalog = new DirectoryCatalog(path);
您是否可以验证服务用户是否可以访问相同的路径?