我創建了C#DLL中使用COM運行Process.Start
通過Web瀏覽器來運行程序。我使用VS2010的內置部署項目創建了一個MSI。我爲這個DLL中的對象指定Guid屬性,但我從不指定位置。當我運行MSI並選擇安裝「Just Me」時,按預期在HKCU
(current_user)中創建註冊表項。我需要它爲所有用戶運行,所以當我運行MSI並選擇爲「Everyone」安裝時,註冊表項也在HKLM
(local_machine)中創建,也如預期。無論哪種方式,一旦MSI安裝DLL,使用DLL的Intranet Web應用程序對於我來說就分別適用於管理員(current_user)和所有用戶(local_machine)。
但是,在我公司的主要IT部門內部,我們無法創建自己的MSI。我們必須將請求和我們的DLL/TLB文件發送給某個人,他們的唯一職能是爲供應商/內部開發人員創建MSI。當我手動運行他的MSI,並選擇安裝「Everyone」時,它再次按預期工作。
的問題:
微星,但是,需要儘可能部署的軟件自動運行,而當這種情況發生時,註冊表項中HKEY_CURRENT_USER
,才能創建,所以當測試用戶嘗試,他們都沒有發現使用該功能。他說,ALLUSERS
屬性設置爲1,所以這應該工作。此外,當我讓他將它們安裝到適當的位置(local_machine)時,他堅持要我在我的DLL中進行這些更改,因爲「MSI文件不會創建註冊表項,它是在DLL期間安裝「。從我在網上閱讀的各種文章中,MSI通常會指定,其中在註冊表中這些密鑰已創建。
的問題(也可用於TL; DR):
是否有任何真理他的說法,我需要在我的DLL指定註冊表中的位置?如果是這樣,我怎樣才能以編程方式指定這些密鑰默認爲HKLM
?現在,我所做的只是指定ComVisible,ClassInterface,Guid,ProgId和ComDefaultInterface ...我從未指定位置,MSI中的「Everyone/Just Me」除外。我對COM對象比較陌生,並且在註冊表中對我自己的創作進行了混亂,所以我不想跳下他的嗓子說我不能做他應該做的事情。
謝謝!
這通常對本地COM組件真實的,不是管理的。安裝程序編寫者通常使用Heat.exe收集註冊表項並且不會將其留給組件。問他用一個.reg文件可以做什麼,用Regasm.exe/reg選項生成一個。還有[ComRegisterFunction],作爲最後的手段使用。 –