问题标签 [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.
windows-installer - InstrallShield 主要升级未完全卸载以前的版本
我有一个 InstallShield 2016 InstallScript MSI 项目。
我使用了 Major Upgrade 选项,但通过这种方法,我看到以前版本的文件被删除,注册表项被删除等。但是,InstallScript (*.rul) 文件中的卸载逻辑似乎没有得到执行,因此以前版本的卸载不完整。
基本上,看来 Major Upgrade 不执行 InstallScript 代码?请指教。
谢谢,
wix - 未选择的功能正在安装
我在工作中被推到了 DevOps 的位置,对 InstallShield 或我正在做的事情知之甚少。我学到的一切都是通过阅读和阅读 Flexera 的文档而学到的。我们的一张票是我在谷歌搜索时无法找到结果的问题——我可能使用了错误的搜索词,但不知道什么是正确的。
基本上,我们的安装程序有很多功能。其中一些功能具有子功能,如果您选择主要功能,则始终安装这些功能。一切都设置为默认安装,但您可以禁用任何功能。如果您希望它们是完全独立的,它们应该是完全独立的。功能 1 的子功能在安装程序中可见(尽管您不能取消选择它们,或从功能 1 中单独选择它们),但功能 4 不可见。
特征 F 下只有一个组件。该组件安装了一大堆 DLL 和配置文件 - 这不是最佳实践,但也不是我可以在此问题范围内更改的内容。查看组件的功能列表时,它被设置为仅功能 F。它 - 并且它包含文件夹 - 在查看任何其他功能的文件时不会显示。
当您选择功能 1 作为唯一选项时,正在安装功能 F。其他功能也可能会发生这种情况,但功能 1 安装速度最快,因此经过最多测试。
这是一个基本的 MSI 项目。我试图通过将“创建 MSI 日志”选项设置为“是”来让 InstallShield 创建日志,但是当我通过运行 Setup.exe 进行测试安装时,它没有生成日志文件。我浏览了 UI 中的脚本并执行安装序列,看起来并没有选择功能 F。
我是否错过了可以将功能相互链接的地方 - 如果是这样,在哪里?
windows-installer - 如何在 InstallScript 代码中添加倒数计时器?
我已经创建了一个基本 MSI 项目,并且我已经编写了一个 InstallScript 自定义操作来从服务器下载文件。我CopyFile()
为此使用了函数。我也在sdShowMsg()
这个下载过程中展示。但是,当下载服务器没有响应时,sdShowMsg()
对话框不会发生在屏幕上和后台下载中。那么有没有办法添加一个倒数计时器,它只会在这段时间内执行下载操作,然后退出。或者有没有其他方法可以首先检查下载服务器是否响应?
installshield - 如何在 InstallScript 中使自定义对话框不可移动?
我有一个基本的 MSI 项目。在这个项目中,我使用 InstallScript 代码创建了一个自定义对话框(由于需要)。我想让那个自定义对话框不动。如何在 InstallScript 代码中实现这一点?我们可以用它DialogSetInfo()
来实现这一点吗?
base64 - InstallScript 安装程序中的 Base64 解码
我有一个 InstallScript 安装程序。在这个安装程序中,我想使用 base64 编码/解码对一个字符串进行编码和解码。InstallScript 中是否有任何功能或 API 可用于实现此目的?
c# - 使用 C# 静默卸载 InstallShield Installscript MSI 程序
这将非常特定于 InstallShield,所以我怀疑以前是否有人处理过这个问题,但我写了一个批处理文件来卸载我们产品的早期版本,但它不起作用。(我们总是在安装/升级之前卸载以前的版本,因为 InstallShield 中的升级似乎不起作用)。卸载 Installscript MSI 项目与典型的卸载非常不同,因为您需要“记录”卸载并将结果存储在文件中,即:
这会将卸载映像存储在 c:\temp\UNINST.ISS 中,然后您需要将其传递给卸载程序以获取要卸载的产品:
所以我对我们产品的所有早期版本都这样做了,然后编写了一个批处理脚本(产品代码为 {7F2A0A82-BB08-4062-85F8-F21BFC3F3708} 来执行如下所示的卸载:
问题是它不起作用。如果我从提升的 CMD 窗口执行卸载,它工作正常:
但是当我执行批处理脚本时,它似乎只是通过卸载而不做任何事情。所以我想我会尝试编写一个简单的 C# 程序来做到这一点,但这也不起作用:
我已尝试对此进行调试并确认当前目录是正确的(使用Directory.GetCurrentDirectory()
),但出现此错误:
installshield - InstallShield 在取消删除后部分删除程序
我有一个行为有点奇怪的 Installscript MSI 项目。
安装成功后,如果我再次启动安装文件,我会弹出一个问题:
“您要完全删除选定的应用程序及其所有功能吗?”
当然,这是预期的行为。
如果我选择“否”,则会显示“InstallShield Wizard Completed”对话框,并通知我“在 [应用程序] 可以完全安装之前向导被中断”。
同样,这一切都在预期的行为范围内。
出乎意料的是,关闭此对话框后,该应用程序已从我的机器中部分删除。已安装的文件和注册表项仍然存在,但它不再出现在 Windows 的“应用程序和功能”中,如果我再次运行安装文件,它会开始新的安装,就好像从未安装过该应用程序一样。
我厌倦了启用维护模式,但无济于事。取消维护对话框会触发相同的部分删除。
任何线索这里发生了什么,或解决这个问题的想法?
xml - 如何在 InstallScript 中读取 XML 节点的值
我有以下 XML 文件。
我想在 InstallScript 函数中读取节点 Config1 的值“SampleData”。我尝试了属性文本、值、节点值。但都没有奏效。我可以读取属性连接的值。但是我如何读取节点的值“SampleData”?
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"
. 这些响应文件位于安装程序文件夹中,这就是为什么我需要知道该文件夹是什么。有人知道获取此文件夹的引用的方法吗?