Wix Bootstrapper - 从安全的 http 存储库下载 bundle

标签 wix wix3.7 burn

我正在开发一个刻录 Bootstrap ,它需要从需要身份验证的 http 存储库下载先决条件。 那么,我应该如何处理这个请求呢?

谢谢!

最佳答案

明白了!这可以通过 OnResolveSource() 事件来实现:

// variable used for authentication
static const LPCWSTR WIXSTDBA_VARIABLE_HTTP_DOWNLOAD_USER = L"HTTPDownloadUserName";
static const LPCWSTR WIXSTDBA_VARIABLE_HTTP_DOWNLOAD_PASS = L"HTTPDownloadPassword";

virtual STDMETHODIMP_(int) OnResolveSource(
    __in_z LPCWSTR wzPackageOrContainerId,
    __in_z_opt LPCWSTR wzPayloadId,
    __in_z LPCWSTR wzLocalSource,
    __in_z_opt LPCWSTR wzDownloadSource
    )
{
    int nResult = IDERROR; // assume we won't resolve source and that is unexpected.

    LPWSTR sczHTTPDwnUserName = NULL;
    LPWSTR sczHTTPDwnPassword = NULL;
    BOOL bUseHTTPAuth = FALSE;

    if (BalStringVariableExists(WIXSTDBA_VARIABLE_HTTP_DOWNLOAD_USER))
    {
        HRESULT hrUsr = BalGetStringVariable(WIXSTDBA_VARIABLE_HTTP_DOWNLOAD_USER, &sczHTTPDwnUserName);
        HRESULT hrPwd = BalGetStringVariable(WIXSTDBA_VARIABLE_HTTP_DOWNLOAD_PASS, &sczHTTPDwnPassword);
        if (SUCCEEDED(hrUsr) && SUCCEEDED(hrPwd)) bUseHTTPAuth = TRUE;
    }

    if (BOOTSTRAPPER_DISPLAY_FULL == m_command.display)
    {
        if (wzDownloadSource)
        {
            if (bUseHTTPAuth)
            {
                HRESULT hr = m_pEngine->SetDownloadSource(wzPackageOrContainerId, wzPayloadId, wzDownloadSource, sczHTTPDwnUserName, sczHTTPDwnPassword);
                nResult = SUCCEEDED(hr) ? IDDOWNLOAD : IDERROR;
            } 
            else
                nResult = IDDOWNLOAD;
        }
        else // prompt to change the source location.
        {
            // related stuff
        }
    }
    else if (wzDownloadSource)
    {
        // If doing a non-interactive install and download source is available, let's try downloading the package silently
        if (bUseHTTPAuth)
        {
            HRESULT hr = m_pEngine->SetDownloadSource(wzPackageOrContainerId, wzPayloadId, wzDownloadSource, sczHTTPDwnUserName, sczHTTPDwnPassword);
            nResult = SUCCEEDED(hr) ? IDRETRY : IDERROR;
        } 
        else
            nResult = IDDOWNLOAD;
    }
    // else there's nothing more we can do in non-interactive mode

    return CheckCanceled() ? IDCANCEL : nResult;
}

关于Wix Bootstrapper - 从安全的 http 存储库下载 bundle ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20568127/

相关文章:

wix - 如何让 [ProgramFilesFolder] 填充到 "C:\Program Files"刻录 UI 项目

Wix 安装程序 - 如何在安装路径中显示 [Manufacturer] 的值?

wix - 在 Bootstrap 中的检测阶段之前,是否可以从链中的 MSI 文件读取 MSI 属性?

wix - 如何在 wxi 文件的变量中使用 ProgramFilesFolder 值

wix - 利用 heat.exe 并获取已本地化的文件名,并使用 wix 将它们包含到 msi 中

wix - 使用 WiX 将文件夹安装到 ALLUSERS(不是快捷方式!)

WiX:错误RegistryKey元素包含意外属性 'ForceDeleteOnUninstall'

c# - 错误 : a certificate chain processed, 但在根错误 .Net Framework 4.7 中终止

wix - 提取 Burn bootstrapper 的内容

wix - WiX 可以生成 MSI Bootstrap 而不是 exe 吗?