我不知道這是否是一個錯誤或沒有,但是這可能是涉及到「位數」 COM +組件屬性:Components Collection
如文檔指出,「位數」可以設置爲1( 32位)或2(64位)。您可以使用這種類型的C#代碼給定組件讀取位數值:
COMAdminCatalog catalog = new COMAdminCatalogClass();
ICatalogCollection appCollection = (ICatalogCollection)catalog.GetCollection("Applications");
appCollection.Populate();
// browse all apps
foreach (COMAdminCatalogObject app in appCollection)
{
Console.WriteLine("application=" + app.Name);
// browse all components
ICatalogCollection compCollection = (ICatalogCollection)appCollection.GetCollection("Components", app.Key);
compCollection.Populate();
foreach (COMAdminCatalogObject comp in compCollection)
{
Console.WriteLine(" component=" + comp.Name);
Console.WriteLine(" bitness=" + comp.get_Value("Bitness"));
}
}
不幸的是,位數是一個只讀屬性。據我所知,基礎COM註冊過程使用實際進行註冊的過程的位數來確定如何設置此屬性。
這這篇文章中隱含解釋說:Serviced Components in 32-bit and 64-bit Architectures
正如你在表格中看到,64位或32位報名取決於您使用工具的版本。這就是爲什麼像Regsvcs.exe這樣的工具有兩種口味:32位和64位,以及你的組件如何註冊取決於這一點。另外,請注意事實上,如果COM +應用程序是空的,事情可能會有所不同。
我想這意味着您的運行.EXE應該被編譯爲64位。
這沒有意義,InstallAssembly直接寫入註冊表項。請確保您的項目沒有將目標平臺設置爲x86。這是VS2010的默認設置。 – 2011-02-25 15:38:53
不,這沒有意義。但是我對不同的應用程序有同樣的問題。如果我刪除'ServicedComponent'並再次添加(手動),一切正常。所以用RegistrationHelper.InstallAssembly來註冊組件爲32bit。 – jgauffin 2011-03-03 10:15:22