如何创建Office COM加载项,可以在没有管理员权限的情况下进行部署

问题描述 投票:0回答:1

我正在寻找一种开发MS Office(Excel,Word,PowerPoint等)插件的方法。 addin需要用C#或C / C ++编写并可部署,最终用户可以在没有管理员权限的情况下安装它。

有一些工作的例子,如Think-cellEikon。但我不知道他们是如何存档的。

经过一些研究,我知道以下创建加载项的方法,但没有一个不符合要求。

1.使用Visual Studio Tools for Office(VSTO)

似乎安装VSTO插件不需要管理员权限,但它需要安装VSTO运行时,并且运行时安装程序需要管理员权限。

2.实现IDTExensibility2接口

在这种情况下,DLL可以放在像C:\Users\myuser\AppData\这样没有管理员权限的地方,但最终DLL必须是

  1. HKEY_CLASSES_ROOT下注册为普通COM,和
  2. HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\(PowerPoint|Excel|Word|Outlook|etc.)\Addins注册。

这里的问题是首次注册需要管理员权限。

那么,有没有其他方法来开发一个办公室插件,安装时不需要管理员权限,如Think-Cell和Eikon?

注意:我可以使用.NET,因为最近的Windows 8/10预安装了.NET运行时。但是,如Think-cell和Eikon所示,似乎不需要.NET来创建一个在安装时不需要管理员权限的插件。

c# office-interop office-addins excel-addins word-addins
1个回答
0
投票

这是一个很好的问题,我需要自己回答。我的解决方案是一个小批量脚本,它将文件复制到用户可访问的目录(在%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>"
© www.soinside.com 2019 - 2024. All rights reserved.