我有自定义操作来发送http帖子以发送到谷歌分析以跟踪安装。我的自定义操作执行其他操作并且这些操作正常。所以我知道我的自定义操作被调用了。我使用HttpClient,需要引用System.Net.Http。我认为问题在于参考。为了确保可以找到参考,我有什么特别的事吗?
我在一个单独的项目中测试了代码,以确保代码正常工作,并且确实如此。当我尝试运行msi时,它无法安装。我把整个http帖子放在一个try语句中来实现,所以至少安装不会失败。
任何人都对它可能是什么或检查什么有任何想法?
答案 0 :(得分:0)
记录您的MSI。
提供自定义操作的日志记录。 MSI不知道它在做什么,所以你需要记录,记录,记录。
阅读MSI日志。
我不怀疑缺少.NET,因为尝试捕获没有任何区别,因为CLR永远不会启动。我怀疑你会发现你从HttpClient中得到错误,表明远程主机无法连接。
可能它与代理相关。互联网连接在任何安装程序环境中都不是普遍不可用的(Web下载和Web下载静默安装程序如何工作?)但它也不是一个确定的事情。每个客户/站点/机器可能不同,因此您可能会或可能无法通过。
我会将此类互动视为“尽力而为”。首先在直接上下文中尝试它(可能作为模拟启动用户运行并获得其代理访问权限)如果这不起作用,请尝试作为延迟上下文运行以作为SYSTEM运行并查看它是否具有访问权限。无论哪种方式尝试|捕获|记录错误并继续前进。不要阻止安装。
答案 1 :(得分:-1)
你不会喜欢这个建议,但出于可靠性原因,设置不应该做这样复杂的事情。 您是否可以在应用程序中执行此操作? 然后,如果需要,您将处于具有完全Internet访问权限和用户交互性的更具可预测性的模拟上下文中。更可靠,更易于调试,并且您可以与用户进行交互以解决连接问题。如果一开始失败,你可以再试一次。相比之下,设置是“一次性” - 并且更难调试。
请记住,大多数企业部署都是在静默安装模式下完成的 。当设置以静默模式运行时,您必须禁止可能需要Internet访问或某种交互的所有此类花哨功能。从设置访问互联网是一种反模式 - 至少目前 - 未来的在线部署技术可能会改变这一事实。但是,在静默的企业安装过程中,您的设置可能会在系统上下文中运行,根本无法访问Internet(SYSTEM帐户无法访问Internet - 除非网络设置很疯狂)。您还可能导致崩溃尝试连接并触发异常,并且您也可能触发安全软件干扰 - 它会发生在“异常设置行为”中。
即使用户使用适当的用户上下文运行您的设置,也可能需要使用代理服务器来访问网络 - 然后您的连接仍将失败,除非您检索代理设置来自系统。我在设置中从未这样做过 - 再次,因为我认为设置不应该要求访问Internet。
在我看来,您也不应该假设 .NET框架始终可用。即使我们使用现代Windows版本到达那里。由于缺少依赖项(还有除.NET之外的其他依赖项),您的代码可能无法运行。
希望对你有意义。 请将此功能放入您的应用 。操作运行后标记注册表 - 如果它只运行一次。如果您在那里打开一些ACL以允许任何人写下标志,您甚至可以写入HKLM。
更新:缩短摘要。如果出现以下情况,请在设置中执行此操作: