我在 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/