2011-09-19 29 views
0

我在創建DirectoryCatalog時掛起的MEF遇到問題。我有一個測試MEF功能的Windows窗體應用程序,它可以毫無問題地工作。但是,當我在Windows服務中運行相同的代碼時,它掛起在線:C#MEF在創建DirectoryCatalog時掛起

_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

我認爲你需要看的第一件事是運行Windows應用程序(如你自己)和Windows服務(作爲什麼?)之間的區別。另外,windows服務的啓動目錄是C:\Windows\System32,這是從中運行的svchost.exe。我使用服務時解決啓動路徑的方式,是將呼叫換到Uri類搶本地路徑:

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

您可以驗證該服務的用戶可以訪問相同的路徑?

+0

服務在本地系統帳戶下運行。我使用您提供的代碼檢查了路徑,它返回的路徑與我從代碼中獲得的路徑相同。這是我安裝我的服務的路徑。有什麼想法嗎?謝謝。 –

+0

在查看本網站中有關MEF和目錄權限的其他人的問題之後,看起來他們在出現安全問題時會收到異常。 –