簡體   English   中英

VBScript中的C#DLL,無需重裝

[英]C# DLL from VBScript, no regasm

是否可以從VBScript訪問C#DLL的方法而不用regasm注冊它? 我將創建DLL幾乎使它對VBScript可見的任何奇特的要求,我都可以...

我在這里讀到,可能可以使用VBScript GetObject來實現此目的,但是我嘗試了這一嘗試,但沒有成功...除了使DLL“ COM可見”之外,我還需要做其他事情嗎? ?

我之所以需要避免regasm是因為它需要管理員權限,並且我需要“靜默地”將此DLL部署到可能具有或不具有管理員權限的許多客戶端。

不,需要注冊,這是腳本解釋器可以找到包含您在腳本的CreateObject()調用中使用的ProgId的DLL的唯一方法。 帶有清單的隔離COM不起作用,您不能為腳本解釋器修改清單。

有一個技術解決方案,您可以在HKCU注冊表配置單元中編寫注冊表項,而無需獲取UAC提升。 Regasm.exe工具始終將其寫入HKLM配置單元中。 這也將注冊程序集,但僅適用於運行Regasm.exe的用戶。 但是,這非常痛苦且容易出錯,您必須編寫自己的注冊方法並應用[ComRegisterFunction]屬性 現在,您要使用RegistryKey類來設置密鑰。 與[ComUnregisterFunction]相同,它應再次刪除密鑰。 互聯網上有很多不好的例子,正確的最佳方法是使用SysInternals的ProcMon來觀察正常使用Regasm.exe時寫入的注冊表項,然后使用HKCU在自己的代碼中復制該注冊表項。代替。

請注意那枚勛章的另一面,實際上是在更改機器的配置,以允許運行任意代碼。 試圖隱藏起來並不會給用戶帶來任何好處,如果您兌現了用戶保持機器安全和可預測的願望,就不應考慮將其隱藏起來。 UAC不會阻止您進行更改,而只是在此處通知用戶。

接受的答案不正確,要求注冊才能使用DLL。 您可以使用GetObject()方法代替CreateObject()方法,如我對此問題的回答所示。

在VBScript中使用DLL

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM