问题标签 [orca]

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 回答
1241 浏览

windows-installer - 使用 Orca 将组合框添加到设置

我试图在设置组件期间在对话框中显示组合框。目前,我们有一个单选按钮组。我认为用组合框替换它应该像在 MSI 的“组合框”表和“控制”表中添加正确的条目一样简单,在相应的对话框中用组合框替换对单选按钮组的引用。但是,这是行不通的。设置崩溃并给出错误 #2885。[Windows 安装程序错误 2885:无法在对话框 [2] 上创建控件 [3]。从这里开始。]

关于如何做到这一点的任何想法?我显然只能使用 Orca(这是自从任何人都记得以来一直使用的东西)。

0 投票
5 回答
18161 浏览

windows-installer - 替换 MSI 中的小文件的最简单解决方案?

我们的许多客户都可以使用 InstallShield、WISE 或 AdminStudio。这些都不是问题。我希望有某种方法可以为我们的小型客户提供无需使用商业重新打包工具的免费工具集和步骤来自己进行文件替换。

只需要替换压缩 MSI 中的单个配置文件,可以假设目标用户已经安装了 Orca,知道如何使用它来自定义属性表(为 GPO 部署嵌入许可证详细信息)并生成了 MST 文件.



免责声明:这与另一个问题非常相似,但该线程中的问题和答案都不清楚。

0 投票
4 回答
7051 浏览

wix - 如何从 MSI“文件”表中提取数据(文件计数)

在我们的构建过程中,目前有可能将非代码文件(例如图像文件)添加到我们的 Web 项目中,但不包含在 WiX 构建的 MSI 安装程序中。

为了帮助防止这种情况,我想在我们的 WiX 项目的 AfterBuild 目标中执行以下操作:

  • 获取构建的所有文件的计数(来自 Web 部署项目的输出)
  • 获取 MSI 中内置的所有文件的计数(来自 MSI 中的“文件”表)
  • 比较计数,如果不匹配则构建失败

如果我启动 Orca,我可以很容易地看到 File 表和计数,但我不知道如何从 MSBuild 自动执行此操作。是否有一些 API 或其他机制可以从 MSI 中获取这些信息?

我不介意编写自定义 MSBuild 任务来提取 MSI 文件表计数。

0 投票
5 回答
14425 浏览

visual-studio-2008 - 使用 Orca 从命令行编辑 msi?

我正在使用 Visual Studio 2008 并为我的应用程序创建了一个安装项目。该应用程序有一个高分辨率图标(适用于 Vista)。Visual Studio 中有一个错误,安装程序会创建一个带有低分辨率图标的桌面快捷方式。

我在Microsoft Connect(https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=338258)中记录了这个bug,终于得到了答案,就是使用Orca来编辑msi文件并替换图标. 该解决方案工作正常。

现在我想自动化这个过程,所以我可以将它包含在我的构建脚本中。有没有办法做到这一点?

0 投票
1 回答
403 浏览

visual-studio-2008 - 特殊字符和 MSI

我必须在使用 Visual Studio 2008 创建的 msi 中输入密码。但我注意到,如果密码中包含“””字符。我得到一个 FileNotFoundException。Orca 中是否有可以纠正此问题的设置?尝试过其他特殊字符,它们工作正常。

0 投票
1 回答
1932 浏览

visual-studio - VS设置项目;如何在卸载时恢复注册表值?

我在 Visual Studio 中有一个安装项目。作为常规安装的一部分,它会在 Windows 注册表中创建/更新一些键和值。如何使更新可逆?

你可能会说“它们是可逆的”,但我不这么认为。以下是我认为它的工作方式:使用 VS 设计器指定所需的注册表项和值。这些键和值在安装过程中写入,在卸载过程中删除。简单的。什么是不可逆的?

当安装期间写入的密钥之一中存在现有值时,问题就出现了。假设它的值为 1。然后在新安装时它的值为 100。卸载后,它根本没有任何值 - 值消失了。


我试图通过“自定义操作”来解决这个问题。

在安装期间,如果用户确认,msiexec 会将值写入注册表。以前在注册表项中的任何内容都消失了。(我们称之为“更新 A”)

为了保留该值,在安装时,有一个自定义操作可以读取并保留“之前”设置。它“更新 A”之前运行。到现在为止还挺好。

卸载时,正常的操作是删除安装期间添加的常规注册表项和值。这工作得很好。将此称为“更新 B”。

要恢复原始注册表值,我还有另一个“自定义操作”。这个在卸载时运行。它成功地将原始值恢复到注册表中。注册表看起来就像原始安装之前一样。我使用ProcMon(一个让我监控注册表更新等的工具)验证了这是否有效。将此称为“更新 C”。

只有一个问题。卸载时,更新 B 发生更新 C 之后。这意味着,在自定义操作恢复原始注册表设置后,msi 会清除恢复的值,就像处理所有其他注册表更新一样。

结果是注册表有空值而不是恢复的值。

有什么帮助吗?如何重新订购更新?我需要Orca吗?我真的不想安装和学习另一个工具来实现这一点。我也希望它是自动的。绝对不希望通过 MSI 编辑器直观地单击来实现这一点。


我可以通过使用WindowsInstaller.Installer类的 Javascript 构建后事件来执行此操作吗? Aaron Stebner 发布了一个脚本,其中添加了“安装后启动应用程序?” Visual Studio 生成的 MSI 对话框。Windows Installer 支持“启动应用程序”功能,但它并未在 VS2008/2005 的设计器中公开。一个快速的 biolerplate 脚本,在 VS 中作为构建后步骤运行,添加到 Launch 对话框中。

自定义操作的排序是否有类似的可能?

0 投票
1 回答
49 浏览

visual-studio-2008 - 每次构建后是否需要更新自定义操作的二进制文件?

我在 VS Team System 2008 中为 setup-project 应用程序创建了一个 c++ 自定义操作。我使用 ORCA 实现了它并插入了自定义操作的二进制图像。这工作正常。每次后续构建后二进制对象是否保持不变?即我假设我不需要更新二进制数据,除非我对自定义操作二进制进行更改。这是如何运作的?提前致谢。

0 投票
1 回答
659 浏览

windows-installer - msi 表信息

http://support.microsoft.com/kb/255905 usoft 说有一个文件 msi.chm 作为 sdk 的一部分分发。我有 sdk v7,找不到这个文件的隐藏或头发。我真正想要的是控制面板下添加/删除程序中支持信息下显示的所有项目的表名和行名。诸如发布者、版本、联系人、支持信息、支持电话、自述文件、产品更新之类的内容。似乎 Publisher 来自 Property 表中的 Manufacturer 行,而 Version 来自 Property 表下的 Version 行。

0 投票
1 回答
1475 浏览

windows-installer - 以编程方式修改补丁创建属性 (.pcp) 文件?

有没有办法使用带有补丁创建属性文件的 msiexec.exe 和 msimsp.exe 编写修补程序构建的完整过程?

我使用 msiexec.exe 创建前后 msi 文件的网络安装,使用 Orca 创建一个 .pcp 文件,使用 msimsp.exe 创建补丁文件。

我一直在按照这两篇文章中的步骤进行操作:

如何为 VS.NET 部署项目创建安装补丁

修补和更新

假设我创建了一个从 1.0 到 1.1 的补丁,现在想要创建一个从 1.1 到 1.2(或 1.0 到 1.2)的补丁。我想重用我用 Orca 创建的 .pcp 文件,但是对该文件的任何修改都应该通过脚本(例如 VBScript)完成,而不是有人不得不再次在 Orca 中打开它。据我了解,我必须 - 至少 - 更改 PatchGUID 值。

如何使用脚本进行这样的修改?

0 投票
1 回答
650 浏览

windows-installer - MSI 在升级安装时删除了所需的程序集,但在修复时将其替换

我遇到了一些与 MSI 安装升级相关的奇怪问题,也许有人可以帮助我:

我有两个 MSI,一个是原始的,一个是升级的:

  • 微星 1.0 版
    • 包含要安装到 GAC 的 .NET 程序集 foo.dll
    • foo.dll 在 MSI 文件系统 gui 中属于“Assembly”(不是“Output”)类型。
  • 微星 2.0 版
    • 还包含 foo.dll(相同版本),以及一堆额外的程序集。
    • 我希望 MSI 2.0 完全取代 1.0,所以我将 RemovePerviousVersion 设置为 False。

现在两种安装场景:

  1. 我运行 MSI 1.0。Foo.dll 已正确安装到 GAC。然后我运行 MSI 2.0 并且Foo.dll 似乎已从 GAC 中删除,但其他程序集在​​那里。我没有办法。但是,如果我去添加/删除程序并单击“修复”,就会放入 Foo.dll。

  2. MSI 1.0 从未安装,我运行的是 MSI 2.0。正如预期的那样, Foo.dll(和其他程序集)那里。

任何想法为什么 foo.dll 在升级过程中被删除?提前致谢!

-肯

更新 经过一些刷新/重建后,它现在似乎可以工作了。但是,现在当我卸载 MSI 时它不会删除 foo.dll,即使它的属性“Permanent”设置为 false。问题不大,但很高兴知道发生了什么。