That looks like an immediate custom action, and that's: 1. Something you shouldn't do as an immediate custom action. If you really really need to do that, take heed of Jacob's advice, but make it deferred and add a rollback custom action to undo all that in case the install fails.
2. Immediate custom actions are not elevated (even if the installing user is an admin). That's most likely the reason why you can't write to that location. --------------- Phil Wilson On Wed, Feb 4, 2015 at 6:48 AM, Hoover, Jacob <jacob.hoo...@greenheck.com> wrote: > Is the file/directory in use when the delete was attempted? Is there a > reason you have to delete the file instead of just overwriting it? Have you > pondered using a RemoveFile element to explicitly remove the files you are > creating in your CA on uninstall? > > -----Original Message----- > From: Sarvagya Pant [mailto:sarvagya.p...@gmail.com] > Sent: Wednesday, February 04, 2015 1:25 AM > To: General discussion about the WiX toolset. > Subject: [WiX-users] Custom action "System.IO.DirectoryNotFoundException" on > second Installation > > I have been making a Wix Installer that is supposed to install the contents > and fetches the parameters passed in terminal and create files. ie. > msiexec /i installer.msi /l*v out.log IPADDRESS="1.1.1.1" will create a file > lpa.config. > > I have following wix file and custom action file. > > WIX: > <?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="yes" > InstallScope="perMachine" /> > > <MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] > is already installed." /> > <MediaTemplate EmbedCab="yes" /> > > <Feature Id="ProductFeature" > Title="CustomWixInstallerWithCustomAction" Level="1"> > <ComponentGroupRef Id="ProductComponents" /> > </Feature> > </Product> > > <Fragment> > <Directory Id="TARGETDIR" Name="SourceDir"> > <Directory Id="WindowsVolume"> > <Directory Id="INSTALLFOLDER" Name="lpaa" /> > </Directory> > </Directory> > </Fragment> > > <Fragment> > <ComponentGroup Id="ProductComponents" Directory="INSTALLFOLDER"> > <Component Id="SomeRandomEXE"> > <File Source > ="G:\SarVaGYa\myworkspace\LatestLpa\lpa\lpa_c\build_win\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">NOT Installed AND NOT > PATCH</Custom> > </InstallExecuteSequence> > </Fragment> > </Wix> > > and the Custom Action File > > namespace SetupCA > { > > public class CustomActions > { > > [CustomAction] > public static ActionResult WriteFileToDisk(Session session) > { > > session.Log("Entering WriteFileToDisk"); > string ipAddress = session["IPADDRESS"]; > string productCode = session["ProductCode"]; > string ssl = session["SSL"]; > string compression = session["COMP"]; > string config_path = "C:\\lpaa\\"; > string temp = @" > {{ > ""logpoint_ip"" : ""{0}"", > ""ssl"" : ""{1}"", > ""compression"" : ""{2}"" > }}"; > if (string.IsNullOrEmpty(ssl)) > { > ssl = "False"; > } > if (string.IsNullOrEmpty(compression)) > { > compression = "True"; > } > string config = string.Format(temp, ipAddress,ssl,compression); > session.Log("Config Generated from property is: " + config); > try > { > System.IO.Directory.Delete(config_path, true); //Recursive > delete content inside LogPointAgent Folder > } > catch (Exception e) > { > session.Log("LogPointAgent Directory Deletion Unsuccessful. > Exception: " + e.ToString()); > } > try > { > System.IO.Directory.CreateDirectory(config_path); > } > catch (Exception e) > { > session.Log("LogPointAgent Directory Creation Unsuccessful. > Exception: " + e.ToString()); > } > > //try > //{ > // System.IO.File.Delete(config_path + "lpa.config"); > //} > //catch (Exception e) > //{ > // session.Log("Config File Deletion Unsuccessful Exception: > " + e.ToString()); > //} > try > { > System.IO.File.WriteAllText(config_path + "lpa.config", > config); > } > catch (Exception e) > { > session.Log("Config File Writing Unsuccessful. Exception: " > + e.ToString()); > } > try > { > System.IO.File.WriteAllText(config_path + "productcode.txt", > productCode); > } > catch (Exception e) > { > session.Log("Product Code Writing Unsuccessful. Exception: > " + e.ToString()); > } > session.Log("Confile file is written"); > session.Log("Product Code file is written"); > return ActionResult.Success; > } > } > } > > The installer works fine when it is freshly installed but if I uninstall it, > it will have residues productcode.txt and lpa.config as it was not installed > by installer. If after uninstalling and installing it again, it doesn't > create these files. If looked in the out.log file, it will get > exception: > Config File Writing Unsuccessful. Exception: > System.IO.DirectoryNotFoundException: Could not find a part of the path > 'C:\lpaa\lpa.config'. > at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) > at System.IO.FileStream.Init(String path, FileMode mode, FileAccess > access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, > FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean > bFromProxy, Boolean useLongPath, Boolean checkHost) > at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess > access, FileShare share, Int32 bufferSize, FileOptions options, String > msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost) > at System.IO.StreamWriter.CreateFile(String path, Boolean append, Boolean > checkHost) > at System.IO.StreamWriter..ctor(String path, Boolean append, Encoding > encoding, Int32 bufferSize, Boolean checkHost) > at System.IO.File.InternalWriteAllText(String path, String contents, > Encoding encoding, Boolean checkHost) > at System.IO.File.WriteAllText(String path, String contents) > at SetupCA.CustomActions.WriteFileToDisk(Session session) > > > How to solve this issue? > > -- > *sarvagya* > ------------------------------------------------------------------------------ > Dive into the World of Parallel Programming. The Go Parallel Website, > sponsored by Intel and developed in partnership with Slashdot Media, is your > hub for all things parallel software development, from weekly thought > leadership blogs to news, videos, case studies, tutorials and more. Take a > look and join the conversation now. http://goparallel.sourceforge.net/ > _______________________________________________ > WiX-users mailing list > WiX-users@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/wix-users > ------------------------------------------------------------------------------ > Dive into the World of Parallel Programming. The Go Parallel Website, > sponsored by Intel and developed in partnership with Slashdot Media, is your > hub for all things parallel software development, from weekly thought > leadership blogs to news, videos, case studies, tutorials and more. Take a > look and join the conversation now. http://goparallel.sourceforge.net/ > _______________________________________________ > WiX-users mailing list > WiX-users@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/wix-users ------------------------------------------------------------------------------ Dive into the World of Parallel Programming. The Go Parallel Website, sponsored by Intel and developed in partnership with Slashdot Media, is your hub for all things parallel software development, from weekly thought leadership blogs to news, videos, case studies, tutorials and more. Take a look and join the conversation now. http://goparallel.sourceforge.net/ _______________________________________________ WiX-users mailing list WiX-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/wix-users