簡體   English   中英

如何將內容文件添加到Wix安裝程序

[英]How to add content file to Wix installer

<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
  <Product Id="*" Name="MyApp" Language="1033" Version="1.0.0.0" Manufacturer="MyAppDev" UpgradeCode="067ac37f-0d36-4173-a24a-5037927bd6da">
    <Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" />
    <MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." />
    <MediaTemplate />
    <Feature Id="ProductFeature" Title="MyApp" Level="1">
      <ComponentGroupRef Id="ProductComponents" />
    </Feature>
  </Product>
  <Fragment>
    <Directory Id="TARGETDIR" Name="SourceDir">
      <Directory Id="ProgramFilesFolder">
        <Directory Id="INSTALLFOLDER" Name="MyApp" />
      </Directory>
    </Directory>
  </Fragment>
  <Fragment>
    <ComponentGroup Id="ProductComponents" Directory="INSTALLFOLDER">
      <!-- TODO: Remove the comments around this Component element and the ComponentRef below in order to add resources to this installer. -->
      <!-- <Component Id="ProductComponent"> -->
      <!-- TODO: Insert files, registry keys, and other resources here. -->
      <!-- </Component> -->
      <Component>
        <File Source="$(var.MyApp.TargetPath)" />
      </Component>
      <Component>
        <File Id="Postcodes.txt" Source="C:\Project\MyApp\MyApp\Files\Postcodes.txt" KeyPath="yes" />
      </Component>
    </ComponentGroup>
  <Feature Id="MainApplication" Title="Main Application" Level="1">
            <ComponentRef Id="Postcodes.txt" />
        </Feature>
  </Fragment>
</Wix>

我的Windows表單應用程序使用存儲在應用程序目錄中的文本文件。 並借助WIX工具集。 我已經創建了一個安裝程序但問題是內容文本文件不存在。 這就是我得到File not found異常的原因。

請幫幫我,如何將此內容文本文件添加到WIX安裝程序? 或者我需要添加“Product.wxs”文件?

您需要添加自定義操作。 這是我的工作的直接副本減去它生成的公司名稱。

<CustomAction Id="RestAction" BinaryKey="myCompanyAgentSetup.WixExtension.Package.dll" DllEntry="Execute" Execute="immediate" Return="check" />

這是在Wix項目中創建的類文件\\ dll。 這是我的實際dll \\ class文件

using System;
using System.Collections.Generic;
using System.Data;
using System.IO;
using System.Linq; 
using System.Net;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using Microsoft.Deployment.WindowsInstaller;

namespace myCompanyAgentSetup.WixExtension
{
public static class myCompanyAgentSetupWixExtension
{
    [CustomAction]
    public static ActionResult Execute(Session session)
    {
        var errorMsg = string.Empty;
        var record = new Record();
        var token = Environment.GetEnvironmentVariable("RX_JOB_NO");

        var restUser = session["RESTUSER"];
        var restPass = session["RESTPASS"];
        var restUrl = string.Format(session["RESTURL"], token);

        var request = (HttpWebRequest)WebRequest.Create(restUrl);
        var encoded = Convert.ToBase64String(Encoding.Default.GetBytes(restUser + ":" + restPass));
        request.Headers.Add(HttpRequestHeader.Authorization, "Basic " + encoded);
        request.Credentials = new NetworkCredential(restUser, restPass);
        Console.WriteLine("attempting to get API Key");

        try
        {
            var response = (HttpWebResponse)request.GetResponse();

            if (response.StatusCode.ToString() != "OK")
            {
                record = new Record
                {
                    FormatString = string.Format(response.StatusDescription)
                };
                session.Message(InstallMessage.Error, record);
                Console.WriteLine("Unable to get API Key");
                Console.WriteLine("Adding RX_CLOUDBACKUP_API Environment Variable with no value");
                UpdateConfigFiles("");

            }
            else
            {
                var apiKey = new StreamReader(response.GetResponseStream()).ReadToEnd();
                if (apiKey.Contains("Error"))
                {

                    record = new Record
                    {
                        FormatString = string.Format(apiKey)
                    };
                    session.Message(InstallMessage.Error, record);
                    session.Message(InstallMessage.Terminate, record);
                }
                Console.WriteLine("Adding RX_CLOUDBACKUP_API with value - " + apiKey);
                UpdateConfigFiles(apiKey);

                return ActionResult.Success;
            }

        }
        catch (Exception e)
        {
            record = new Record
            {
                FormatString = string.Format(e.Message)
            };
            session.Message(InstallMessage.Error, record);
            session.Message(InstallMessage.Terminate, record);
        }

        //An error has occurred, set the exception property and return failure.
        session.Log(errorMsg);
        session["CA_ERRORMESSAGE"] = errorMsg;

        record = new Record
        {
            FormatString = string.Format("Something has gone wrong!")
        };
        session.Message(InstallMessage.Error, record);
        session.Message(InstallMessage.Terminate, record);
        return ActionResult.Failure;
    }

    private static void UpdateConfigFiles(string apiKey)
    {
        if (!string.IsNullOrEmpty(apiKey))
        {
            Environment.SetEnvironmentVariable("RX_CLOUDBACKUP_API", null, EnvironmentVariableTarget.Machine);
            Environment.SetEnvironmentVariable("RX_CLOUDBACKUP_API", apiKey, EnvironmentVariableTarget.Machine);
        }
        else
        {
            Environment.SetEnvironmentVariable("RX_CLOUDBACKUP_API", "", EnvironmentVariableTarget.Machine);
        }

    }
}

}

希望這會讓你前進。 如果您還需要其他信息,請告訴我

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM