VSTO部署和应用程序没有匹配的安全区域

时间:2017-04-27 07:08:26

标签: c# vsto excel-addins

我创建了一个Excel Add-In,当我直接从Visual Studio运行时,它可以正常运行,但现在我需要在另一台计算机上使用此Add-In。为此,我复制了项目中的[AddIn].vsto文件:bin/Release/[AddIn].vsto

问题是,当我尝试在另一台计算机上运行该文件时,我收到以下错误:

  

部署和应用程序没有匹配的安全区域
  **************异常文本**************   System.Deployment.Application.InvalidDeploymentException:部署和应用程序没有匹配的安全区域。      在Microsoft.VisualStudio.Tools.Applications.Deployment.ClickOnceAddInDeploymentManager.GetManifests(TimeSpan超时)      在Microsoft.VisualStudio.Tools.Applications.Deployment.ClickOnceAddInDeploymentManager.InstallAddIn()

我已尝试清除oneClick缓存,但仍无效。还尝试了CCleaner工具......

即使未部署加载项,这是否也能正常工作?或者我需要先部署它?

2 个答案:

答案 0 :(得分:1)

来自其他计算机而不是您自己的文件的文件被附加了一个所谓的区域标识符。来自e的文件。 G。 Internet配备了区域“ 3”和Windows,因为OneClick安装程序可能会对它们施加一些限制。属性对话框中的“取消阻止”也会修改此区域标识符,但不会带来良好的用户体验。我将概述解决此问题的两种方法:

  1. 自动取消阻止所有设置文件
  2. 构建一个自解压安装程序

自动解锁所有设置文件

假设您为OneClick部署程序包使用标准文件夹名称“ pub”,只需在“ pub”目录旁边添加一个批处理文件(例如Setup.bat)。批处理文件应包含类似于以下内容的内容;请确保在设置中用相应的文件夹名称替换“ XXX”。

@ECHO OFF
FOR %%a in (pub\*.*) do (echo.>%%a:Zone.Identifier)
FOR %%a in ("pub\Application Files\XXX\*.*") do (echo.>%%a:Zone.Identifier)
.\pub\Setup.exe

只要您在公司内部,此解决方案就可以。您可以将两个项目都存储在一个文件夹中(可能将其压缩),然后用户将执行Setup.bat

构建一个自解压安装程序

如果许可没有问题,只需使用WinZIP或WinRAR生成自解压存档,解压缩后即可运行安装程序。否则,您可能会使用类似于this explanation的7zip。但是,这样做有一个诡计,就是阻止安装程序在完成外部安装之前删除临时文件。

说明:

创建一个空文件夹。我将其称为工作目录

在工作目录中,使用7zip创建一个7zip归档文件( Installer.7z )。该档案应包含两个顶级项目:

  • pub 发布后的OneClick设置目录

  • Installer.bat

Installer.bat 应该包含以下几行:

@ECHO OFF
robocopy pub\ ..\Installer_pub\ /mir
..\Installer_pub\Setup.exe

在工作目录中,添加具有以下内容的 config.txt

;!@Install@!UTF-8!
 Title="Your Application Name"
 BeginPrompt="Do you want to install?"
 ExecuteFile="setup.bat"
 ExecuteParameters=""
 ;!@InstallEnd@!

在工作目录中,添加找到in here 7zSD.sfx

在工作目录中,现在应该找到Installer.7z,config.txt和7zSD.sfx。这就是魔术发生的地方。。。

在命令行(cmd.exe)中导航到工作目录,然后运行以下命令:

copy /b 7zSD.sfx + config.txt + Installer.7z Installer.exe

现在,您应该在工作目录中看到Installer.exe。就是;-)

答案 1 :(得分:0)

我有完全相同的问题,我不得不做的不仅是解锁(rmb - >属性 - >在底部解锁).vsto文件,还有你的youraddinname_version子文件夹的所有其他内容,比如dll和清单。如果有其他方法可以克服这个问题,那就好了,因为要求用户在他们的机器上执行此操作,因为他们想要安装我的插件很痛苦。