【问题标题】:How to execute a custom action to write files in C:\Users\[some user]\AppData\Local before StartServices custom actions is executed如何在执行 StartServices 自定义操作之前执行自定义操作以在 C:\Users\[some user]\AppData\Local 中写入文件
【发布时间】:2015-11-20 21:21:21
【问题描述】:

好吧,我正在使用 WIX 解决安装程序中的一些问题,我遇到的问题是我的安装程序在 Windows Server 2008 x64 和 x86 中运行不佳,但在其他版本中运行良好作为 Windows 7,Vista,Server 2012...所以我发现安装程序无法在 C:\Users[some user]\AppData\Local 中写入一些服务需要运行的文件并查看问题我发现在 Windows Server 2008 中,文件在服务启动并且软件崩溃后写入,所以我在 InstallExecuteSequence 中做了一些更改,如图所示 Orca Sequence

如您所见,我的自定义操作 ValidateLocalInstallation 在序列表中有 1501,StartServices 有 5900,但是当我运行安装程序时,ValidateLocalInstallationStartServices 之后执行自定义操作,问题仍然存在,服务运行时出现错误。

这是我对此 CA 的配置 CustomActions configuration

1.- 我无法更改此文件的路径,因为它在其他操作系统中运行良好 2.- 我对第二张图片的更改不起作用.....文件是在 StartServices CA 执行后写入的。

任何人都有任何想法......

【问题讨论】:

  • 您可以在安装的最后放置您的服务启动CA。

标签: wix windows-installer


【解决方案1】:

没有足够的细节来分析可能的问题,但我可以指出在您的情况下什么不起作用:

您的 ValidateLocalInstallation 自定义操作是即时的,这意味着它在系统被 MSI 文件中的任何内容完全更改之前运行。未写入任何文件,也未安装或启动任何服务。因此,正如您所说,问题与在 StartServices 之后运行无关。安装分为两个阶段 - 立即意味着编写执行/回滚脚本,立即调用自定义操作,不对系统执行任何操作。延迟是安装实际执行某些操作 - 它调用延迟的自定义操作并完成工作。是的,如果您查看详细日志,您可能会以混乱的顺序看到事物,但那是因为有两个 StartServices 条目,一个是立即的(只是一个脚本/回滚条目),另一个是真正启动已安装的服务,所以我的猜测是您误解了日志。

它被标记为 impersonate=no,这无济于事。即时自定义操作使用安装用户的凭据运行,因此 impersonate=no 无关紧要。您正在使用安装用户的凭据运行。

使用安装用户凭据运行的即时自定义操作不会提升(除非您从提升的上下文启动整个 MSI 设置),因此您的代码中的故障可能与安全相关,具体取决于您的代码的用途。

无法判断您的自定义操作是否真的有效。它可能会做各种事情,捕获错误,然后返回成功结果,以便安装继续进行。如果没有看到您的代码,就无法判断它是否正常工作,但是如果您使用 return=check,您需要确保在出现任何问题时返回错误结果,以便安装失败并回滚,这就是重点返回=检查。显然,在我看来,如果没有创建文件,那么您应该安装失败。

我不清楚为什么不能将文件安装到该文件夹​​ - LocalAppDataFolder 属性可能是您需要的。我怀疑您需要安装这些文件,然后在 StartServices 之前添加具有延迟自定义操作的内容。我还将 LocalAppDataFolder 属性值传递给您的自定义操作,以确保您知道正确的位置,因为如果您发现需要 deferred 和 impersonate=no,那么您的 CA 将使用本地系统帐户运行,并尝试获取“当前用户”的本地应用程序数据文件夹将是系统帐户的,而不是安装用户的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-22
    • 1970-01-01
    • 1970-01-01
    • 2023-02-15
    • 2011-05-28
    • 1970-01-01
    相关资源
    最近更新 更多