问题标签 [installscript-msi]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
659 浏览

powershell - 如何通过 Powershell 更新 InstallShield 项目中注册表部分的文件夹名称?

在此处输入图像描述

我有更新安装程序的产品名称、版本、产品代码、快捷方式名称等的 powershell 脚本。

但我不知道如何更新在注册表部分下创建的特定文件夹的名称,该文件夹本身位于 InstallShield 2015 中InstallScript MSI项目的系统配置部分下。

文件夹的顺序是这种形式 - HKEY_LOCAL_MACHINE\SOFTWARE\Demo\12.1.0.0

我希望使用 InstallShield 自动化功能将12.1.0.0文件夹值更新为13.1.0.0 。

对此问题的任何帮助将不胜感激。

0 投票
1 回答
108 浏览

windows-installer - InstrallShield 主要升级未完全卸载以前的版本

我有一个 InstallShield 2016 InstallScript MSI 项目。

我使用了 Major Upgrade 选项,但通过这种方法,我看到以前版本的文件被删除,注册表项被删除等。但是,InstallScript (*.rul) 文件中的卸载逻辑似乎没有得到执行,因此以前版本的卸载不完整。

基本上,看来 Major Upgrade 不执行 InstallScript 代码?请指教。

谢谢,

0 投票
2 回答
1826 浏览

wix - 未选择的功能正在安装

我在工作中被推到了 DevOps 的位置,对 InstallShield 或我正在做的事情知之甚少。我学到的一切都是通过阅读和阅读 Flexera 的文档而学到的。我们的一张票是我在谷歌搜索时无法找到结果的问题——我可能使用了错误的搜索词,但不知道什么是正确的。

基本上,我们的安装程序有很多功能。其中一些功能具有子功能,如果您选择主要功能,则始终安装这些功能。一切都设置为默认安装,但您可以禁用任何功能。如果您希望它们是完全独立的,它们应该是完全独立的。功能 1 的子功能在安装程序中可见(尽管您不能取消选择它们,或从功能 1 中单独选择它们),但功能 4 不可见。

特征 F 下只有一个组件。该组件安装了一大堆 DLL 和配置文件 - 这不是最佳实践,但也不是我可以在此问题范围内更改的内容。查看组件的功能列表时,它被设置为仅功能 F。它 - 并且它包含文件夹 - 在查看任何其他功能的文件时不会显示。

当您选择功能 1 作为唯一选项时,正在安装功能 F。其他功能也可能会发生这种情况,但功能 1 安装速度最快,因此经过最多测试。

这是一个基本的 MSI 项目。我试图通过将“创建 MSI 日志”选项设置为“是”来让 InstallShield 创建日志,但是当我通过运行 Setup.exe 进行测试安装时,它没有生成日志文件。我浏览了 UI 中的脚本并执行安装序列,看起来并没有选择功能 F。

我是否错过了可以将功能相互链接的地方 - 如果是这样,在哪里?

0 投票
1 回答
253 浏览

windows-installer - 如何在 InstallScript 代码中添加倒数计时器?

我已经创建了一个基本 MSI 项目,并且我已经编写了一个 InstallScript 自定义操作来从服务器下载文件。我CopyFile()为此使用了函数。我也在sdShowMsg()这个下载过程中展示。但是,当下载服务器没有响应时,sdShowMsg()对话框不会发生在屏幕上和后台下载中。那么有没有办法添加一个倒数计时器,它只会在这段时间内执行下载操作,然后退出。或者有没有其他方法可以首先检查下载服务器是否响应?

0 投票
0 回答
30 浏览

installshield - 如何在 InstallScript 中使自定义对话框不可移动?

我有一个基本的 MSI 项目。在这个项目中,我使用 InstallScript 代码创建了一个自定义对话框(由于需要)。我想让那个自定义对话框不动。如何在 InstallScript 代码中实现这一点?我们可以用它DialogSetInfo()来实现这一点吗?

0 投票
1 回答
194 浏览

base64 - InstallScript 安装程序中的 Base64 解码

我有一个 InstallScript 安装程序。在这个安装程序中,我想使用 base64 编码/解码对一个字符串进行编码和解码。InstallScript 中是否有任何功能或 API 可用于实现此目的?

0 投票
2 回答
1682 浏览

c# - 使用 C# 静默卸载 InstallShield Installscript MSI 程序

这将非常特定于 InstallShield,所以我怀疑以前是否有人处理过这个问题,但我写了一个批处理文件来卸载我们产品的早期版本,但它不起作用。(我们总是在安装/升级之前卸载以前的版本,因为 InstallShield 中的升级似乎不起作用)。卸载 Installscript MSI 项目与典型的卸载非常不同,因为您需要“记录”卸载并将结果存储在文件中,即:

这会将卸载映像存储在 c:\temp\UNINST.ISS 中,然后您需要将其传递给卸载程序以获取要卸载的产品:

所以我对我们产品的所有早期版本都这样做了,然后编写了一个批处理脚本(产品代码为 {7F2A0A82-BB08-4062-85F8-F21BFC3F3708} 来执行如下所示的卸载:

问题是它不起作用。如果我从提升的 CMD 窗口执行卸载,它工作正常:

但是当我执行批处理脚本时,它似乎只是通过卸载而不做任何事情。所以我想我会尝试编写一个简单的 C# 程序来做到这一点,但这也不起作用:

我已尝试对此进行调试并确认当前目录是正确的(使用Directory.GetCurrentDirectory()),但出现此错误:

0 投票
1 回答
84 浏览

installshield - InstallShield 在取消删除后部分删除程序

我有一个行为有点奇怪的 Installscript MSI 项目。

安装成功后,如果我再次启动安装文件,我会弹出一个问题:

“您要完全删除选定的应用程序及其所有功能吗?”

当然,这是预期的行为。

如果我选择“否”,则会显示“InstallShield Wizard Completed”对话框,并通知我“在 [应用程序] 可以完全安装之前向导被中断”。

同样,这一切都在预期的行为范围内。

出乎意料的是,关闭此对话框后,该应用程序已从我的机器中部分删除。已安装的文件和注册表项仍然存在,但它不再出现在 Windows 的“应用程序和功能”中,如果我再次运行安装文件,它会开始新的安装,就好像从未安装过该应用程序一样。

我厌倦了启用维护模式,但无济于事。取消维护对话框会触发相同的部分删除。

任何线索这里发生了什么,或解决这个问题的想法?

0 投票
1 回答
516 浏览

xml - 如何在 InstallScript 中读取 XML 节点的值

我有以下 XML 文件。

我想在 InstallScript 函数中读取节点 Config1 的值“SampleData”。我尝试了属性文本、值、节点值。但都没有奏效。我可以读取属性连接的值。但是我如何读取节点的值“SampleData”?

0 投票
0 回答
46 浏览

c# - 如何在c#中获取从启动的目录

我正在运行从 InstallShield 安装程序调用的 C# 自定义操作(只是一个类库),我需要访问启动 .exe 的文件夹。我试过了:

他们都返回 c:\windows\syswow64 - 而不是 .exe 启动的文件夹。我猜这是因为 .dll 嵌入在 .msi 中,并且被提取到 c:\windows\syswow64 (尽管很难想象它真的被提取到那里)。

这就是您需要知道的全部内容,但如果您想了解更多,我将卸载以前编写为 InstallScript MSI 项目的版本,并以静默方式卸载它们,您需要提供“响应文件”(您需要一个 Flexera 帐户才能关注该链接),但它基本上说您需要将卸载操作“记录”到响应文件中,然后使用以下语法将该文件传递给 msiexec 卸载:setup.exe /s /f1"response file name". 这些响应文件位于安装程序文件夹中,这就是为什么我需要知道该文件夹是什么。有人知道获取此文件夹的引用的方法吗?