C # MEF Зависает при создании DirectoryCatalog - PullRequest
0 голосов
/ 19 сентября 2011

У меня проблема с MEF, когда он зависает при создании DirectoryCatalog. У меня есть приложение 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 никогда не вызывается.

UPDATE:

Я определил, что мой путь не был возвращен таким же образом, когда я вызвал этот код из моей службы. Он форматировал путь к каталогу как «C: / Program% 20Files / My% 20Service». Я не уверен, почему это не делало это для моего приложения выигрышных форм.

1 Ответ

1 голос
/ 19 сентября 2011

Я думаю, что первое, на что вам нужно обратить внимание, это различия между запуском приложения Windows (как у себя) и службы Windows (как что?). Кроме того, каталог запуска для служб Windows - C:\Windows\System32, откуда запускается svchost.exe. Способ использования путей запуска при использовании служб заключается в том, чтобы обернуть вызов в класс Uri, чтобы получить локальный путь:

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

Можете ли вы убедиться, что у пользователя службы есть доступ к тому же пути?

...