Yes this worked. Thank you. Yet there was another solution given to me on stackoverflow. I could use session["LocalAppDataFolder"] in my code to get directly the value. I could not get how the LocalAppDataFolder is being accessed as property even though I haven't passed it. Is there any reference on this?
On Sun, Dec 7, 2014 at 8:25 PM, Sean Hall <r.sean.h...@gmail.com> wrote: > You need to remove the CustomAction attribute from the SHGetFolderPath > method and put it on your WriteFileToDisk method. > > On Sun, Dec 7, 2014 at 6:06 AM, Sarvagya Pant <sarvagya.p...@gmail.com> > wrote: > > > 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 > > > > ------------------------------------------------------------------------------ > 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 > -- *sarvagya* ------------------------------------------------------------------------------ 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