在控制台应用程序中工作时,WiX MSI 安装程序中的 HTTPS API 调用失败

问题描述 投票:0回答:1

我正在使用 WiX 工具集为 .NET Framework 4.8 应用程序开发自定义安装程序。在安装过程中,我需要进行 HTTPS API 调用。 API 调用在独立控制台应用程序中完美运行,但从 MSI 安装程序执行时始终失败。

问题详情: API 调用可在控制台应用程序中使用 HTTP 和 HTTPS。 在 MSI 安装程序中,HTTP 请求成功,但 HTTPS 请求失败并出现以下错误

错误:

服务器配置时发生错误:WebException API调用期间发生: https://{域名}:443/api/RPA/RpaSetupLog 状态:接收失败 回复: 消息:底层连接已关闭:An 接收时发生意外错误。 堆栈跟踪:位于 System.Net。 HttpWebRequest.GetResponseO 在自定义操作。自定义操作。 SendDataToApi(字符串 协议、字符串domainOrlp、字符串端口、字符串jsonData、 字符串 rootCertificateString, 字符串 中间证书字符串,字符串 endDomainCertificateString) 在

发生在行:O

所以问题是,我有一个 Wix 安装程序,我有 msi 安装程序,在我尝试使用 https 协议调用 api 时,它给了我错误,但在 notmal http 中它成功了,当我创建一个 consol 应用程序时,使用相同的参数和相同的功能并尝试调用它成功,我遇到了问题,在 .msi 安装程序中使用 https,我还添加了这一行

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

在 consol 应用程序中相同,它可以工作,但在 msi 安装程序中它失败

检查证书:

确保服务器使用有效的证书。对于自签名证书,我已在生产系统的证书存储中手动安装了根证书、中间证书和域证书。 在不同环境下测试:

在我的本地计算机上,控制台应用程序和 MSI 安装程序都工作正常。 关于生产系统: 控制台应用程序适用于 HTTP 和 HTTPS。 MSI 安装程序对于 HTTPS 失败。 网络连接:

验证生产系统可以解析并 ping API 域。 来自 MSI 安装程序的 HTTP 请求成功,表明网络访问可用。

Code :

private static bool SendDataToApi(string protocol, string domainOrIp, string port, string jsonData)
{
    string apiUrl = $"{protocol}://{domainOrIp}:{port}/api/RPA/RpaSetupLogs";

    try
    {
        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(apiUrl);
        request.Method = "POST";
        request.ContentType = "application/json";
        request.Timeout = 30000;

        // Enable TLS 1.2
        ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

        // Bypass SSL Validation (Tried this as a workaround)
        ServicePointManager.ServerCertificateValidationCallback = (sender, certificate, chain, sslPolicyErrors) => true;

        using (var writer = new StreamWriter(request.GetRequestStream()))
        {
            writer.Write(jsonData);
            writer.Flush();
        }

        using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
        {
            if (response.StatusCode != HttpStatusCode.OK)
            {
                throw new InvalidOperationException($"API call failed with status: {response.StatusCode}");
            }
        }

        return true;
    }
    catch (WebException webEx)
    {
        Console.WriteLine($"WebException: {webEx.Message}, Status: {webEx.Status}");
        throw;
    }
}

环境详情

  • 本地系统:

    • Windows 10

    • .NET框架4.8

    • HTTPS 在控制台应用程序和 MSI 安装程序中均有效。

  • 生产系统:

    • Windows Server 2019

    • HTTPS 在控制台应用程序中工作,但 在 MSI 安装程序中失败

    • HTTP 在控制台应用程序和 MSI 安装程序中都能正常工作。

我需要什么帮助

  1. 为什么 HTTPS 请求在 MSI 安装程序中失败,但在控制台应用程序中正常?

  2. 是否与安装程序的执行上下文、权限或环境设置有关?如果是这样,我该如何调试或解决这个问题?

  3. WiX 安装程序在安装过程中支持 HTTPS 调用是否需要特定配置?

非常感谢任何见解或建议。谢谢!

c# api wix .net-4.8 wix3
1个回答
0
投票

您的自定义操作是否作为“系统”执行(即使用不同的用户配置文件)。重现:将控制台应用程序作为系统运行(即在安装发生的帐户下)。

要以当前用户身份运行您的操作:

<CustomAction Id="..."
  Impersonate="yes"
  ...
</CustomAction>
© www.soinside.com 2019 - 2024. All rights reserved.