vista 64与windows 7上的vb6和vb.net互操作

vista 64与windows 7上的vb6和vb.net互操作,.net,deployment,vb6,uac,dll,.net,Deployment,Vb6,Uac,Dll,我已经编写了一个.net dll,可以从vb6成功调用它。对xp、vista 32和vista 64的部署已经开始工作。它在64位windows 7上不起作用。我无法在最终用户计算机上运行regasm.exe/codebase name.dll,因为他们不是管理员 目前,我的应用程序部署在“c:\Program Files(x86)\application name”目录中。部署需要管理员权限。在这种情况下,它应该失败。 如果您需要更精确的说明,请告诉我。我正在使用免注册COM访问.NET互操作

我已经编写了一个.net dll,可以从vb6成功调用它。对xp、vista 32和vista 64的部署已经开始工作。它在64位windows 7上不起作用。我无法在最终用户计算机上运行
regasm.exe/codebase name.dll
,因为他们不是管理员


目前,我的应用程序部署在“c:\Program Files(x86)\application name”目录中。

部署需要管理员权限。在这种情况下,它应该失败。


如果您需要更精确的说明,请告诉我。

我正在使用免注册COM访问.NET互操作程序集

基本上,首先必须使用
mt.exe
创建程序集清单,并可以选择使用
sn.exe
重新签名强名称,如下所示

mt.exe -managedassemblyname:{Your_DLL} -nodependency -out:{Your_DLL}.manifest
mt.exe -manifest {Your_DLL}.manifest -outputresource:%{Your_DLL};1
sn -Ra {Your_DLL} {Your_PFX}
<dependency>
    <dependentAssembly>
        <assemblyIdentity name="{Your_DLL}" version="1.0.0.0" publicKeyToken="hash_here" processorArchitecture="x86" />
    </dependentAssembly>
</dependency>
然后在应用程序清单中引用此程序集清单,如下所示

mt.exe -managedassemblyname:{Your_DLL} -nodependency -out:{Your_DLL}.manifest
mt.exe -manifest {Your_DLL}.manifest -outputresource:%{Your_DLL};1
sn -Ra {Your_DLL} {Your_PFX}
<dependency>
    <dependentAssembly>
        <assemblyIdentity name="{Your_DLL}" version="1.0.0.0" publicKeyToken="hash_here" processorArchitecture="x86" />
    </dependentAssembly>
</dependency>


工具自动执行清单创建过程,但如果是一次性安装,则可以手动执行。

在没有管理员权限的情况下如何安装?初始安装具有管理员权限。我需要能够在没有管理员权限的情况下更新它。你想更新什么?如果没有管理员权限,您将无法更新程序文件中的DLL。(除非您修改ACL)我设置了文件夹权限,以便用户可以更新dll。它在Vista和XP上工作,没有管理员权限。我想更新现有的dll…感谢您的回复。它在64位Windows 7上工作吗?我将HKLM替换为HKCU\Software\Classes\Wow6432Node。这适用于vista 64,但不适用于windows 7。。。。我怀疑WOW6432节点有问题。感谢您的帮助。我了解到运行Wow6432Node是必需的,因为vb6应用程序是32位的。我将删除它并尝试一下。我对Wow6432Node使用了一把斧头,它开始在win7 64位上工作。谢谢你的帮助!为了以防万一有人感兴趣,我已经构建了一个小的powershell脚本,它会在构建中自动运行。VMIS是程序的名称。VMISLIB.dll是.net dll的名称。由于x86文件路径的原因,这将只在64位框中工作#运行regasm并创建初始文件cd“\Program Files(x86)\VMIS”&'C:\Program Files(x86)\VMIS\regasm'/regfile/codebase VMISLIB.dll#为32位计算机创建文件$file1=“C:\Program Files(x86)\VMIS\VMISLIB.reg”$file2=“C:\Program Files(x86)\VMIS\VMISLIBdeploy.reg”$match=“HKEY_CLASSES\u ROOT”$replacement=“HKEY_CURRENT\u USER\Software\CLASSES”“$content=Get content$file1$content=$content-creplace$match,$replacement$content | Set content$file2我同意Reg free comm是处理此问题的最佳方式。我们遇到了一些问题。这仍然是我的长期目标。我将试用UMMM工具。我能够使用上面列出的mt和sn命令使reg free comm正常工作。谢谢你的帮助!