C#MEF在创建DirectoryCatalog时挂起

时间:2011-09-19 13:22:06

标签: c# .net-4.0 mef

在创建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应用程序做这个。

1 个答案:

答案 0 :(得分:1)

我认为您首先需要关注的是运行Windows应用程序(如您自己)和Windows服务(如同什么?)之间的区别。此外,Windows服务的启动目录是C:\Windows\System32svchost.exe从哪里运行。我在使用服务时解析启动路径的方法是将调用包装到Uri类以获取本地路径:

var path = new Uri(typeof(Something).Assembly.Location).LocalPath;
var catalog = new DirectoryCatalog(path);

您是否可以验证服务用户是否可以访问相同的路径?