如何在执行StartServices自定义操作之前执行自定义操作以在C:\ Users \ [some user] \ AppData \ Local中写入文件

时间:2015-11-20 21:21:22

标签: wix windows-installer

我正在使用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但是当我运行安装程序时 ValidateLocalInstallation 自定义操作在 StartServices 之后执行,问题仍然存在且服务运行时出错。

这是我对此CA的配置 CustomActions configuration

1.-我无法改变这些文件的路径,因为它在其他方面工作正常 2.-我对第二张图片的更改不起作用.....在执行 StartServices CA后,文件被写入

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

1 个答案:

答案 0 :(得分:0)

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

您的ValidateLocalInstallation自定义操作是立即执行的,这意味着它在MSI文件中的任何内容完全根据系统更改之前运行。没有写入任何文件,也没有安装或启动任何服务。因此,正如您所说,问题不在于在StartServices之后运行。安装是两个阶段 - 立即意味着编写执行/回滚脚本,调用立即自定义操作,不对系统做任何事情。延迟是指安装实际上做了什么 - 它调用延迟的自定义操作并完成工作。是的,如果您查看详细日志,您可能会看到令人困惑的顺序,但这是因为有两个StartServices条目,一个立即(只是一个脚本/回滚条目),一个真正启动已安装的服务,所以我的猜测是你误解了日志。

它被标记为冒充=否,并且没有帮助。立即自定义操作与安装用户的凭据一起运行,因此impersonate = no无关紧要。您已使用安装用户的凭据运行。

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

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

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