当前位置: 首页 > 知识库问答 >
问题:

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

邢英奕
2023-03-14

我有Inno安装程序(在我之前写的),它提取了一组VSTO文件并开始安装VSTO MS Office插件。它有一个问题,当将VSTO文件提取到临时文件夹并启动VSTOInstaller.exe时,它会立即显示完成按钮。如果用户单击它,临时文件将被删除,并在VSTOInstaller中开始实际安装VSTO插件,然后导致“文件未找到”错误。我应该解决这个问题(理想情况下,只有当它生成的VSTOInstaller完成执行时,Inno安装程序中的完成按钮才会出现)。

VSTO包本身(“应用程序文件”文件夹、setup.exe. vsto文件的集合)是由Visual Studio中的点击一次发布工具创建的。包经过数字签名等。

我尝试了各种选项:

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

当前<代码>。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首先打开的。

知道如何保存未打包的文件(它们放在临时文件夹中没什么大不了的)或者等待安装过程中产生的所有子进程吗?

如果这很重要,Inno安装程序是5.2.3,VSTO是使用Visual Studio 2015构建的。使用Outlook 2010和2016进行了测试。

共有2个答案

韦寒
2023-03-14

我最近创建了与您要求相同的内容。它对我来说工作正常,开始设置.exe然后搜索 VSTO 进程并将退出事件绑定到它。

            var process = Process.Start("Setup.exe");
            Thread.Sleep(2000);
            var processs = Process.GetProcesses().Where(i => i.ProcessName.Contains("VSTO")).ToList();
            foreach (var item in processs)
            {
                if (item.ProcessName.Contains("VSTO"))
                {                   
                    item.EnableRaisingEvents = true;
                    item.Exited += ExcelProcessExit; // this method will be executed after vsto completes it's installation or user cancels the installer.
                }
            }
冉弘化
2023-03-14

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

DefaultDirName={%TEMP}\outlook_addin_tmp

不过,这是一个hack——正确的解决方案是等待VSTO安装程序完成。我建议你显式启动VSTOInstaller.exe。它应该允许你等待它完成

像这样的东西:

Filename: "{commonpf}\microsoft shared\VSTO\<ver>\VSTOInstaller.exe"; \
  Params: "{app}\OutlookAddin.vsto"; \
  StatusMsg: "Extracting Outlook Addin installer..."; Flags: waituntilterminated
 类似资料:
  • 安装完毕后,会出现相应的安装完毕界面: 然后点击“完成”,即可启动默认勾选了的Notepad++了。 至此,Notepad++安装完毕。

  • 本文向大家介绍安装完成后如何找回SQL Server实例安装时的序列号,包括了安装完成后如何找回SQL Server实例安装时的序列号的使用技巧和注意事项,需要的朋友参考一下 当需要再次安装SQL Server时,如果序列号找不到了,可以试着从已经安装的实例里找回序列号,因为安装完SQL Server后,序列号(Product Key)被保存在注册表里; MSDN订阅下载的安装包是内置序列号的,则

  • 含安装程序的源码但不包含lerx v2的源码。 安装说明:     1.本安装程序是用Java自行开发的,已自带java环境。自动侦测msvcr71.dll。     2.测试环境:全新安装的Windows 2003 Server、XP、Windows 7(未安装任何软件)。     3.安装程序将安装及自动配置 Java环境、MySQL Server 5.0、Tomcat及Lerx V2。   

  • 在我的< code>[Files]部分中,我有以下内容: 在部分我有: 最后,在部分,我有: 现在,在这个版本的程序中,我已经将这两个DLL文件的功能合并到另一组DLL文件中: 因此, DLL 文件。现在,我知道如果它们存在,我可以简单地删除它们: 但据我所知,这不会像 中那样触发 DLL 文件的注销。 我该怎么做?在安装过程中删除并注销DLL文件(如果存在)?

  • 我正在尝试安装NetBeans,但我得到一个白色窗口“NetBeans安装程序锁定文件存在”并退出。我以前从未在这台PC上安装过NetBeans,安装程序第一次启动时,我不小心拒绝了它的管理员权限。 我尝试过: > 搜索隐藏文件可见的锁定文件。 在appdata\roaming中查找NetBeans文件夹,但没有。 尝试不同的安装程序 如果有人能帮我,我将不胜感激。