如何使InnoSetup安装程序在安装完成后或VSTO安装程序完成后保留临时文件?

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

我有InnoSetup安装程序(在我之前写过),该安装程序提取了一组VSTO文件,然后开始安装VSTO MS Office插件。问题在于,将VSTO文件提取到临时文件夹中并启动VSTOInstaller时,它会立即显示“完成”按钮。如果用户单击它,则会删除临时文件,并在VSTOInstaller中开始实际安装VSTO加载项,然后导致“找不到文件”错误。我应该对此进行修复(理想情况下,仅当由其产生的VSTOInstaller完成执行时,才在InnoSetup安装程序中显示“完成”按钮)。

VSTO包本身(“应用程序文件”文件夹,setup.exe和.vsto文件的集合)由Visual Studio中的ClickOnce Publish工具创建。包裹已经过数字签名,等等。

我尝试了各种选择:

  • 直到打开.vsto文件的过程完成(带有waituntilterminated标志),才完成InnoSetup安装。不起作用,似乎在打开.vsto文件时进程发生了变化,VSTOInstaller不是链中的第一个进程。因此,InnoSetup只等待快速将执行传递给另一个进程(VSTOInstaller)的进程,然后关闭。
  • 安装时不删除提取的文件(带有uninsneveruninstall标志)。看起来它仅适用于卸载,而在安装过程中删除临时文件则有所不同。安装完成后,我找不到任何方法来使解压缩的文件保持完整。

当前.iss文件看起来像:

;---------------------------------------------------------------------
[Setup]
AppName=Outlook Addin
AppVerName=Outlook Addin 2.0
DefaultDirName={tmp}
DefaultGroupName=Outlook Sync Addin
Compression=bzip
Uninstallable=no
OutputBaseFilename=OutlookSetup
VersionInfoVersion=2.0.0.10
UsePreviousAppDir=no
;
;---------------------------------------------------------------------
[Files]
Source: "SourcesForExe\*"; DestDir: "{app}"; Attribs: hidden system; Flags: recursesubdirs uninsneveruninstall
;---------------------------------------------------------------------
[Run]
Filename: "{app}\OutlookAddin.vsto"; Parameters: "OVERRIDE=YES"; StatusMsg: "Extracting Outlook Addin installer..."; Flags: shellexec waituntilterminated

最初,安装程序运行setup.exe而不是OutlookAddin.vsto。这导致setup.exe启动VSTOInstaller.exe并立即关闭。我以为更改为OutlookAddin.vsto(并添加shellexec标志)将解决此问题,因此VSTOInstaller.exe将通过此方法直接启动,但没有用。原来.vsto文件由vstoee.dll首先打开。

任何想法如何保留解压缩的文件(它们都不会保留在临时文件夹中没什么大不了的,或者如何以某种方式等待在安装过程中产生的所有子进程?

[如果这样,InnoSetup是5.2.3,则VSTO是使用Visual Studio 2015构建的。已通过Outlook 2010和2016测试。

vsto inno-setup clickonce
1个回答
0
投票

{tmp}是安装程序的临时文件夹,该文件夹最后被删除。如果要保留文件,请使用TEMP环境变量显式引用用户的临时文件夹:

DefaultDirName={%TEMP}\outlook_addin_tmp

(这是一个技巧–正确的解决方案是等待VSTO安装程序完成)

© www.soinside.com 2019 - 2024. All rights reserved.