如何创建无需管理员权限即可部署的 Office COM 加载项
Posted
技术标签:
【中文标题】如何创建无需管理员权限即可部署的 Office COM 加载项【英文标题】:How to create Office COM Add-in, which is deployable without admin rights 【发布时间】:2019-05-07 02:12:56 【问题描述】:我正在寻找一种开发 MS Office(Excel、Word、PowerPoint 等)插件的方法。插件需要用 C# 或 C/C++ 编写,并且可以部署,最终用户可以在没有管理员权限的情况下安装它。
有一些工作示例,例如Think-cell 和Eikon。但我不知道他们是如何存档的。
经过一番研究,我知道了以下几种创建插件的方法,但没有一个不符合要求。
1。使用 Visual Studio Tools for Office (VSTO)
安装VSTO插件好像不需要管理员权限,但需要安装VSTO运行时,运行时安装程序需要管理员权限。
2。实现 IDTExensibility2 接口
在这种情况下,DLL 可以放置在像 C:\Users\myuser\AppData\
这样的地方,没有管理员权限,但最终 DLL 必须是
-
在
HKEY_CLASSES_ROOT
下注册为普通COM,并且
注册于HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\(PowerPoint|Excel|Word|Outlook|etc.)\Addins
。
这里的问题是第一次注册需要管理员权限。
那么,有没有其他方法可以开发安装时不需要管理员权限的办公插件,例如 Think-Cell 和 Eikon?
注意:我可以使用 .NET,因为最近的 Windows 8/10 预装了 .NET 运行时。但似乎不需要 .NET(如 Think-cell 和 Eikon 中所见)来创建安装时不需要管理员权限的插件。
【问题讨论】:
【参考方案1】:这是一个很好的问题,我需要自己回答。我的解决方案是一个小批量脚本,它将文件复制到用户可访问的目录(在 %appdata% 目录下),然后将所有信息放入注册表中。请注意:使用reg
命令,您可以在没有管理员权限的情况下写入注册表(只要它在 HKCU 中)。为了提供进入注册表项的正确路径,它会定位目标目录并将其放入注册表文件而不是占位符。
所以,如果没有可用的管理员权限,让我给你我用于我的软件 SlideFab 作为一种备份安装程序的代码。这个脚本可能不漂亮并且没有错误处理,但它可以工作。
@echo off
echo ___________________________________________________________
echo Welcome to the SlideFab installer batch
echo ___________________________________________________________
echo This batch will install SlideFab 2 for the active user only
echo No system files will be touched
echo ___________________________________________________________
echo IMPORTANT: Do not run this install batch from the zip file
echo directly. It won't work. Please extract the zip
echo file contents to a folder and run it from there.
echo
echo For further information visit https://SlideFab.com
echo ___________________________________________________________
:Ask
echo Would you like install SlideFab 2?(Y/N)
set INPUT=
set /P INPUT=Type input: %=%
If /I "%INPUT%"=="y" goto yes
If /I "%INPUT%"=="n" goto no
goto Ask
:yes
set "sourcepath=%cd%"
set installfolder="SlideFab 2"
set installpath="%appdata%\SlideFab 2"
cd %appdata%
rmdir /S /Q %installfolder%
mkdir %installfolder%
cd %sourcepath%
robocopy "SlideFab 2" %installpath% /E
powershell "(Get-Content SlideFab.reg) | foreach-object ($_ -replace \"FOLDER_APP_DATA\", (\"%appdata%\").replace(\"\\\",\"\\\\\")) | foreach-object ($_ -replace \"FILEPATH_APP_DATA\", (\"%appdata%\").replace(\"\\\",\"/\")) | Set-Content SlideFabLocalized.reg"
reg import SlideFabLocalized.reg
del SlideFabLocalized.reg
echo SlideFab 2 was installed
pause
exit
:no
echo SlideFab 2 was not installed
pause
注册表项如下所示:
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\SOFTWARE\Microsoft\Office\PowerPoint\Addins\HuehnSolutions.SlideFab2]
"FriendlyName"="SlideFab2"
"Description"="SlideFab. The most powerful Powerpoint automation tool ever built"
"Manifest"="FOLDER_APP_DATA\\SlideFab 2\\SlideFab2.vsto|vstolocal"
"LoadBehavior"=dword:00000003
[HKEY_CURRENT_USER\Software\Microsoft\VSTO\Security\Inclusion\a6cf3786-79d9-47b1-a547-d4f03100b58d]
"Url"="file:///FILEPATH_APP_DATA/SlideFab 2/SlideFab2.vsto"
"PublicKey"="<RSAKeyValue><Modulus>seBB06Hh+Io1QcLLu2OVLl761vIeB4PDMAKlHDRlS9TVD0RZU4tBZ4ty22npfRhvt1Uqm5b8At7GZpQrLuMtX1AAvjmoy9qlm7NsX95UCFBP8ip//YvupVmcVpg7okAzuKALBu3anJGC1aa+Q57h6IP3cDnfdswoCvC1e9KJKpSmzktXG29MQ3nQBLn7Oo3UUM4C9Om8h/96cjowiI8FdHuz6JXIj8K8OEEhtCWxGnIL2ebYvnrPxBRFIlBHkuDeGHZ2C0hJB4MWN6MkTQEkJp5YtfJrt1oDmYPvlVjzp3gcUHcLft2/1gLnOVJFMDrwBM93YZNetQAuwzQdgxesHQ==</Modulus><Exponent>AQAB</Exponent></RSAKeyValue>"
【讨论】:
以上是关于如何创建无需管理员权限即可部署的 Office COM 加载项的主要内容,如果未能解决你的问题,请参考以下文章