繁体   English   中英

创建DirectoryCatalog时C#MEF挂起

[英]C# MEF Hangs when creating DirectoryCatalog

我在创建DirectoryCatalog时遇到了MEF挂起的问题。 我有一个Windows窗体应用程序,可以测试MEF功能,并且可以正常运行。 但是,当我在Windows Service中运行相同的代码时,它挂在了网上:

_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 Forms应用程序没有这么做。

我认为您首先需要了解的是运行Windows应用程序(作为您自己)与运行Windows服务(作为什么)之间的区别。 此外,Windows服务的启动目录是C:\\Windows\\System32 ,这是svchost.exe运行目录。 使用服务时,我解析启动路径的方法是包装对Uri类的调用以获取本地路径:

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

您可以验证服务用户可以访问同一路径吗?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM