registry - 使用 NSIS 部署 Excel 加载项 - 注册表问题

标签 registry nsis excel-addins

我在 VS 2012 中创建了一个测试项目

文件 -> 新建 -> 项目 -> 其他语言 -> Visual C# -> Office -> 2010

构建良好。我想在客户端机器上部署它,查看 MSDN 网站我有 2 个选项,clickonce 或 installshield

https://msdn.microsoft.com/en-us/library/bb386179(v=vs.110).aspx

我不能使用 clickonce,并且有人要求我不要使用 installshield,而是使用 NSIS。我在 NSIS 方面取得了进展,但它无法注册 dll。如果我尝试使用 Regsvr32 手动注册它,我会收到一条错误消息

“模块“[filepath]TestAddin.dll”已加载,但未找到入口点 DLLRegisterServer。请确保“[filepath]TestAddin.dll”是有效的 DLL 或 OCX 文件,然后重试。

这是我尝试在 NSIS 脚本中注册的方法,取自我不完全理解的旧论坛页面。

  Exec 'regsvr32.exe /s "$INSTDIR\MyExcelAddin.dll"'

  WriteRegStr HKLM "Software\Microsoft\Office\Excel\Addins\MyExcelAddin.Connect" "FriendlyName" "MyExcelAddin"
  WriteRegStr HKLM "Software\Microsoft\Office\Excel\Addins\MyExcelAddin.Connect" "Description" "MyExcelAddin"
  WriteRegDWORD HKLM "Software\Microsoft\Office\Excel\Addins\MyExcelAddin.Connect" "LoadBehavior" "00000003"
  WriteRegDWORD HKLM "Software\Microsoft\Office\Excel\Addins\MyExcelAddin.Connect" "CommandLineSafe" "00000000"

更新:我现在可以执行以下操作创建注册表项,但加载项仍然不会显示在 excel 中
  SetRegView 64
  Exec '"%SystemRoot%\Microsoft.NET\Framework\v4.0.30319\RegAsm.exe" "$INSTDIR\MyExcelAddin.dll"'

  WriteRegStr HKLM "Software\Microsoft\Office\Excel\Addins\MyExcelAddin" "FriendlyName" "MyExcelAddin"
  WriteRegStr HKLM "Software\Microsoft\Office\Excel\Addins\MyExcelAddin" "Description" "MyExcelAddin"
  WriteRegStr HKLM "Software\Microsoft\Office\Excel\Addins\MyExcelAddin" "Manifest" "Manifest file:///$INSTDIR\MyExcelAddin.vsto|vstolocal"
  WriteRegDWORD HKLM "Software\Microsoft\Office\Excel\Addins\MyExcelAddin" "LoadBehavior" "00000003"
  WriteRegDWORD HKLM "Software\Microsoft\Office\Excel\Addins\MyExcelAddin" "CommandLineSafe" "00000000"

更新 2:这实际上最终起作用了,我在 NSIS 脚本中以错误的顺序做了其他事情。我没有将 .dll 复制到我尝试使用 Regasm.exe 注册的文件夹中

最佳答案

如果您使用的是 64 位安装的 Office,并且确定适合“所有用户”安装,则您的注册表路径需要进行如下调整:

WriteRegStr HKLM "Software\Wow6432Node\Microsoft\Office\Excel\Addins\MyExcelAddin" "FriendlyName" "MyExcelAddin"
WriteRegStr HKLM "Software\Wow6432Node\Microsoft\Office\Excel\Addins\MyExcelAddin" "Description" "MyExcelAddin"
WriteRegStr HKLM "Software\Wow6432Node\Microsoft\Office\Excel\Addins\MyExcelAddin" "Manifest" "Manifest file:///$INSTDIR\MyExcelAddin.vsto|vstolocal"
WriteRegDWORD HKLM "Software\Wow6432Node\Microsoft\Office\Excel\Addins\MyExcelAddin" "LoadBehavior" "00000003"
WriteRegDWORD HKLM "Software\Wow6432Node\Microsoft\Office\Excel\Addins\MyExcelAddin" "CommandLineSafe" "00000000"

否则,您可能会更好地为“当前用户”安装加载项,在这种情况下,您需要进行如下调整:
WriteRegStr HKCU "Software\Microsoft\Office\Excel\Addins\MyExcelAddin" "FriendlyName" "MyExcelAddin"
WriteRegStr HKCU "Software\Microsoft\Office\Excel\Addins\MyExcelAddin" "Description" "MyExcelAddin"
WriteRegStr HKCU "Software\Microsoft\Office\Excel\Addins\MyExcelAddin" "Manifest" "Manifest file:///$INSTDIR\MyExcelAddin.vsto|vstolocal"
WriteRegDWORD HKCU "Software\Microsoft\Office\Excel\Addins\MyExcelAddin" "LoadBehavior" "00000003"
WriteRegDWORD HKCU "Software\Microsoft\Office\Excel\Addins\MyExcelAddin" "CommandLineSafe" "00000000"

关于registry - 使用 NSIS 部署 Excel 加载项 - 注册表问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30076844/

相关文章:

c++ - 如何将文件路径和参数的执行路径分开?

windows - 通过 Go 写入 Windows 注册表

xml - WiX RemoveRegistryKey 元素的行为与广告不符

installation - JDK 的静态 URL?

c# - VSTO 加载项 : Reference in the manifest does not match the identity of the downloaded assembly

Excel VBA - 使用工作簿 B 中的模块更新工作簿 A 中的数据

c# - Excel 添加编程

c++ - 如何获取软件版本?

windows - 32 位 NSIS 是否可以启动 64 位程序?

NSIS 指南