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

coo*_*roc 6 registry nsis excel-addins

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

file - > new - > project - > Other Languages - > 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"
Run Code Online (Sandbox Code Playgroud)

更新:我现在可以创建注册表项执行以下操作,但加载项仍然不会显示在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"
Run Code Online (Sandbox Code Playgroud)

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

mys*_*egg 0

如果您使用 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"
Run Code Online (Sandbox Code Playgroud)

否则,您可能会更好地为“当前用户”安装加载项,在这种情况下,您需要进行如下调整:

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"
Run Code Online (Sandbox Code Playgroud)