簡體   English   中英

.NET6:使用 regsvr32 注冊 COM DLL 結果為 80040111

[英].NET6: registering COM DLL with regsvr32 results in 80040111

在 Steve Syfuh 的博客文章repo之后,我正在玩 Win10/11 的 CredentialProviders。 按原樣使用 repo(.net framework 4.6.1)效果很好,但我想在 .net6 中進行。

我已閱讀有關 .net 內核的 COM 的文檔並嘗試遵循,但無論我做什么,我都會收到以下錯誤:

模塊 [myproject].comhost.dll 已加載,但對 DllRegisterServer 的調用失敗,錯誤代碼為 0x80040111。

我的步驟是:

  • [ComVisible(true)]和唯一的 GUID 放入應該可以訪問的公共類(即CredentialProviderCredentialViewCredentialProviderCredential
  • 編輯.csproj文件並添加<EnableComHosting>True</EnableComHosting>
  • 運行midl工具以獲取credentialprovider.tlb並將其添加到.csproj文件中:
<ItemGroup>
    <ComHostTypeLibrary Include="..\interop\credentialprovider.tlb" Id="1" />
</ItemGroup>
  • 提升cmd以運行regsvr32 [myproject].comhost.dll並得到上述錯誤

我發現這個問題的內容相似(但我無法在我的機器上運行它,並且 [myproject].dll 就在 comhost 旁邊),我在 Hans Passant 的鏈接中嘗試了建議,但都是徒勞的。

請問有人對可能是什么問題有任何建議嗎?

我想我仍然可以在 .net 框架 4.8 中做到這一點(再次有效),但我想稍微干預一下,我想堅持使用最新版本的 .net(還有一些我想要的包喜歡使用不再支持框架)。

好的,所以在不時檢查之后,我想通了。 我唯一的問題是我將原來的CredProvider.Net.Interop2.dll重命名為Interop2.dll 一旦我將 DLL 重命名回原來的名稱,它又開始像魅力一樣工作了。

不過很奇怪,因為在項目文件中我無論如何都指出了正確的路徑:

<ItemGroup>
  <Reference Include="CredProvider.NET.Interop2">
    <HintPath>..\midl\Interop2.dll</HintPath>
  </Reference>
</ItemGroup>

但我會把它留給比我更聰明的人。 (對於我的項目,無論如何我都會重新創建 DLL 以及一個合適的名稱。)

最后,我分享一下結果,以防其他人想在當前 C# 版本中使用憑據提供程序: CredentialProvider.Net6 我還糾正了所有讓我煩惱的 VS 警告。 雖然從原始存儲庫繼承了一些錯誤,但我會保留它們 - 查找和糾正它們相對容易,並創建一個很好的練習來真正理解憑證提供者:-)

暫無
暫無

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

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