​I have been making a MSI Installer that can get the value of property
passed to it and write a Config file. I am supposed to call MSI as:

msiexec /i myfile.msi /l*v output.txt IPADDRESS="192.168.1.1"

and get value of IPADDRESS

I have following Wix C# Code that is supposed to work​

​namespace SetupCA
{

    public class CustomActions
    {

        [CustomAction]
        [DllImport("shell32.dll")]
        public static extern Int32 SHGetFolderPath(
            IntPtr hwndOwner,           // Handle to an owner window.
            Int32 nFolder,              // A CSIDL value that identifies
the folder whose path is to be retrieved.
            IntPtr hToken,              // An access token that can be used
to represent a particular user.
            UInt32 dwFlags,             // Flags to specify which path is
to be returned. It is used for cases where
            // the folder associated with a CSIDL may be moved or renamed
by the user.
            StringBuilder pszPath);
        public static ActionResult WriteFileToDisk(Session session)
        {

            session.Log("Begin WriteFileToDisk");

            const int CSIDL_LOCAL_APPDATA = 0x001c;
            StringBuilder path1 = new StringBuilder(256);
            SHGetFolderPath(IntPtr.Zero, CSIDL_LOCAL_APPDATA, IntPtr.Zero,
0, path1);
            session.Log("LOCAL APP_DATA PATH " + path1.ToString());

            string ipAddress = session["IPADDRESS"];
            string path = path1.Replace(@"\", @"\\").ToString();
            path = path + @"\\lpa\\config\\";
            session.Log("LOCAL APP_DATA PATH NOW MODIFIED " +
path.ToString());
            string temp = @"
{{
 ""logpoint_ip"" : ""{0}""
}}";
            string config = string.Format(temp, ipAddress);
            session.Log("Config Generated was " + config);
            System.IO.Directory.CreateDirectory(path);
            try
            {
                System.IO.File.Delete(path + "lpa.config");
            }
            catch (Exception e)
            {
                session.Log(e.ToString());
            }
            System.IO.File.WriteAllText(path + "lpa.config", config);
            session.Log("Ending WriteFileToDisk");

            return ActionResult.Success;
        }
    }
}​

​The above code is supposed to get the value of IPADDRESS and write a file
to the folder given by CSIDL_LOCAL_APPDATA . For this I used
SHGetFolderPath inside shell32.dll using DLLIMPORT.

My Wix file is given below:

<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi";>
    <Product Id="*" Name="CustomWixInstallerWithCustomAction"
Language="1033" Version="1.0.0.0" Manufacturer="LogPoint"
UpgradeCode="ba9015b9-027f-4451-adb2-e38f9168a850">
        <Package InstallerVersion="200" Compressed="no"
InstallScope="perMachine" />

        <MajorUpgrade DowngradeErrorMessage="A newer version of
[ProductName] is already installed." />
        <MediaTemplate />

        <Feature Id="ProductFeature"
Title="CustomWixInstallerWithCustomAction" Level="1">
            <ComponentGroupRef Id="ProductComponents" />
        </Feature>
    </Product>

    <Fragment>
        <Directory Id="TARGETDIR" Name="SourceDir">
            <Directory Id="ProgramFilesFolder">
                <Directory Id="INSTALLFOLDER" Name="CustomWixInstaller" />
            </Directory>
        </Directory>
    </Fragment>

    <Fragment>
        <ComponentGroup Id="ProductComponents" Directory="INSTALLFOLDER">
      <Component Id="SomeRandomEXE">
        <File Source
="G:\SarVaGYa\myworkspace\LatestLpa\lpa\lpa_c\here\src\lpa\Release\lpa.exe"
/>
      </Component>
        </ComponentGroup>
    <Binary Id="SetupCA"  SourceFile="G:\visual studio
stuffs\SetupCA\SetupCA\bin\Release\SetupCA.CA.dll"/>
    <CustomAction Id="WRITEFILETODISK" Execute="immediate"
BinaryKey="SetupCA" DllEntry="WriteFileToDisk" />
    <InstallExecuteSequence>
      <Custom Action="WRITEFILETODISK" Sequence="2"></Custom>
    </InstallExecuteSequence>
    </Fragment>
</Wix>

Both get compiled but when I try to install the MSI using the command I
wrote above I get the following error:

"There is a problem with this Windows Installer package. A DLL required for
this install to complete could not be run. "

How do I solve this Issue? Can't I use DLLImport in Wix C# Custom Action.​
------------------------------------------------------------------------------
Download BIRT iHub F-Type - The Free Enterprise-Grade BIRT Server
from Actuate! Instantly Supercharge Your Business Reports and Dashboards
with Interactivity, Sharing, Native Excel Exports, App Integration & more
Get technology previously reserved for billion-dollar corporations, FREE
http://pubads.g.doubleclick.net/gampad/clk?id=164703151&iu=/4140/ostg.clktrk
_______________________________________________
WiX-users mailing list
WiX-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/wix-users

Reply via email to