问题标签 [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.
openssl - 如何通过 InstallScript 函数创建自签名证书?
我在 InstallShield 中有 InstallScript MSI 安装程序项目。我想在我的产品安装过程中创建自签名证书。那么是否有任何我可以在 InstallScript 代码中使用的 Windows API,或者是否有任何 InstallScript 函数可以在安装过程中创建自签名证书。
windows-installer - 如何停止在 InstallShield 中记录 XMLFileChanges?
我有一个安装程序的 InstallShield 项目。我在其中添加了 XML 文件更改。这些 XML 文件更改有一些数据,我在安装期间将这些数据添加到 XML 文件中。所有 XML 文件更改都将记录到日志文件中。但我不想将这些 XML 文件更改的语句记录到日志文件中。我怎样才能防止它登录到日志文件?
exe - 如何从旧的 InstallShield 安装程序的 exe 文件中获取 Setup.rul 文件?
我有一个旧的 InstallShield 安装程序,我相信它是使用 InstallShield 2012 制作的。我没有相同的安装脚本代码。我只有安装程序的 exe。
我需要创建一个新的安装程序,其中包含旧安装程序的一些相同功能,那么有什么方法可以从它的 exe 中获取安装程序的 setup.rul 文件吗?
我做了一些谷歌搜索,但没有任何帮助。
installscript - 如何获取在 sdLogonInformation 对话框的用户名字段中输入的值并在另一个 rul 文件中使用
我正在使用 Installscript-MSI 项目项目。
为了从用户那里获取用户名和密码,我正在使用 sdLogonUserInformation 对话框。例如用户名和密码分别存储在变量 szUser、szPassword 中。现在我想在另一个 rul 文件中使用这个变量将它插入到配置文件中。
请建议我将其存档的代码...
安装脚本
想在另一个 rul 文件中使用变量 svUser、svPassword
installshield - 为什么 InstallShield 2015 InstallScript 安装程序在卸载期间要求重新启动?
多年来,我们一直在使用使用 InstallShield 2015 SP2 工具创建的 Installscript 安装程序来安装我们的应用程序,但是在处理我们的新版本时,我在此 Installscript 安装程序的卸载过程结束时收到了一个新对话框。它显示卸载完成的消息,并在下面提到的对话框底部提供两个单选按钮选项。
- 是的,我现在想重新启动计算机。
- 不,我稍后会重新启动计算机。
但是,安装程序的 Installscript 项目中没有添加此类代码,该代码在卸载完成后要求重新启动。我确实在谷歌上搜索过,但没有运气。希望任何人都知道如何在安装程序卸载结束时阻止此对话框出现。
installshield - 我如何(以编程方式)知道 Installshield 安装程序何时静默运行?
我有 Installscript MSI 安装程序(已被基本 MSI 安装程序取代)的历史,当我卸载它们时,我需要知道卸载是否正在静默运行。我运行一些自定义代码来检查 .iss 文件是否存在(静默卸载所必需的),如果它们不存在,我会弹出一条消息,指出文件不在预期的位置。问题是,当程序从控制面板(不是静默)卸载时,此代码运行并显示消息。所以我需要一个系统变量来告诉我它在静默模式下运行,所以当它不是时我可以抑制消息。
我找不到任何能告诉我这一点的东西。有谁知道我可以通过编程方式告诉我的方式?
c# - process.start() 在不处于调试模式时不起作用。调试时工作正常
我有一个非常简单的 C# 程序,需要静默卸载旧产品。因此,我设置了一个流程并使用正确的参数运行它,当我逐步执行代码时,它每次都能正常工作。当我从命令行运行它时,它每次都会失败。我正在捕获 StandardOut 和 StandardError 和 StandardOut 只包含文本:
此操作仅对当前安装的产品有效。
如果我然后立即在调试模式下运行它,它工作正常,所以显然没有安装该产品是不正确的。
这是代码:
以下是以下值:
StartInfo.FileName = "C:\Program Files (x86)\InstallShield 安装信息{325FAC03-900A-4BB2-B45E-1D0EB4D414BE}\setup.exe"
StartInfo.args = /s /f1"C:\Users\User\CommonCustomActions\Uninstall 5.0.0-5.3.2\Uninstall 5.0.0-5.3.2\bin\Debug\Uninstall response files\5.2.1\UNINST- 5.2.1.iss"
有任何想法吗?
ps 原始安装是作为 InstallShield InstallScript MSI 项目构建的,这就是我需要传递“响应文件”的原因
installshield - Installscript MSI Installshield 安装程序无法在 32 位 Windows 注册表位置设置注册表
我正在使用 InstallShield 2020 R3 SP1,并且我在 Installscript MSI 项目中创建了一个安装程序。
此安装程序已成功添加\设置 64 位 Windows 注册表项位置(即“HKEY_LOCAL_MACHINE\SOFTWARE\SungardePI”)中的注册表项,但无法在 32 位 Windows 注册表位置(即“HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\SungardePI”下添加\设置注册表项"
我的组件设置为 64 位,安装程序默认将注册表项设置为 64 位位置。我还编写了 installscript 代码以在 32 位位置设置注册表项,但它不起作用。
谁能帮助我了解如何通过 installscript 代码在 32 位位置设置注册表项?
下面的当前安装脚本代码 -
注意 - 首先,我调用了 SetRegistrykey() 函数,该函数默认更新 64 位注册表位置中的节点,然后我在 if 语句下添加代码并再次调用 SetRegistrykey() 函数以在 32 下执行相同的更改-位注册表位置,但它不会更新任何注册表节点,而是仅覆盖 64 位位置中的更改。
我还尝试替换REGDB_OPTIONS=REGDB_OPTIONS | REGDB_OPTION_WOW64_64KEY;与REGDB_OPTIONS=REGDB_OPTIONS | REGDB_OPTION_USE_DEFAULT_OPTIONS;但没有成功。
通常,Installshield 安装程序默认更新 32 位 Windows 注册表位置,但在我的情况下,它是在 64 位 Windows 注册表位置更新\设置值,我无法弄清楚原因。
#用于更新 32 位位置中的注册表项的代码。
windows-installer - InstallScript MSI 项目 - 次要升级不更新文件
软件:InstallShield 2016 专业版
项目类型:InstallScript MSI 项目
案例场景:
要修复应用程序的小错误,我需要更新“应用程序数据\文件和文件夹”部分下的 DLL 文件,其中这些 DLL 文件是从 C# 解决方案的构建中生成的。为了交付较新的构建版本 DLL 文件,我决定使用小升级,我需要更新产品版本值(1.2.4 -> 1.2.5)和包代码(每次我都会自动更新包代码)构建可执行安装程序)。
问题:
- 机器安装了较早版本的应用程序,执行新的安装程序以触发次要升级。但是,升级过程完成后文件不会更新(例如,DLL 文件的日期修改不会更新)。
- 升级后(例如 1.2.5 -> 1.2.6),卸载时不会删除“应用程序数据\文件和文件夹”下的文件。如果不执行升级,文件将被正确删除。
- 最后一个问题是原来的 NLog.dll 版本是 3.5,然后我在项目中添加了另一个版本为 4.7 的 NLog.dll。我意识到新添加的 NLog.dll 在“Application Data\Files and Folders”和“Organization\Components”部分下都变成了“NLog1.dll”,然后我删除了版本为 3.5 的版本,并从 NLog1 重命名了新版本。 dll 到 NLog.dll。通过这些操作,即使我没有执行小升级,卸载时也不会删除 NLog.dll 和 NewtonSoftJson.dll。
我已经尝试过,但没有解决问题:
- 更新“应用程序数据\文件和文件夹”部分中文件的属性,为所有 DLL 文件启用“始终覆盖”。
- 在 OnMaintUIBefore() 中调用 FeatureReinstall() 或 ComponentReinstall()。此外,我创建了一个新的 InstallScript MSI 项目,它克隆了现有项目的大部分内容。新项目的安装程序没有文件升级/删除问题,也没有实现 InstallScript 逻辑。因此,我认为该问题不是由现有项目中的 InstallScript 引起的。
- 删除 Application Data\Files and Folders (NLog.dll) 下的文件,然后将其添加回来。这种方法会产生一个新问题,即使我没有使用新的安装程序升级,也不会删除 NLog.dll。
项目信息:
该项目在媒体下只有一个发布设置,没有设置升级或补丁设计。结果,构建只生成installer.exe,而不是创建installer.msi。我提到这个的原因是因为我查找创建一个小升级,但一个小升级需要installer.msi。虽然没有创建小升级或补丁,但更改产品版本仍然会触发小升级!
供参考:
根据我所做的研究,“应用程序数据\文件和文件夹”和“组织\组件”下的文件似乎在主键、注册表或命名方面搞砸了?但是,我对 InstallShield 还很陌生,我不敢对项目进行大的改动。专家的任何帮助和建议将不胜感激!