FDI Error code of 11 means user aborted; I found that interesting so I dug into this a bit...
sfxca\Extract.cpp :: ExtractCabinet Comments note that the destination directory (szExtractDir) must already exist (and should be empty) sfxca\Extract.cpp :: FNFDINOTIFY... case fdintCOPY_FILE... pfdin->psz1 is the name of the file within the cabinet, including the 'folder name'. For this example, assume "Foo\File.txt" and the extraction directory is "C:\Extract" Then we get to this code... 1 size_t cchFile = MultiByteToWideChar(CP_UTF8, 0, pfdin->psz1, -1, NULL, 0); 2 size_t cchFilePath = wcslen(g_szExtractDir) + 1 + cchFile; 3 wchar_t* szFilePath = (wchar_t*) _alloca((cchFilePath + 1) * sizeof(wchar_t)); 4 if (szFilePath == NULL) return -1; 5 StringCchCopyW(szFilePath, cchFilePath + 1, g_szExtractDir); 6 StringCchCatW(szFilePath, cchFilePath + 1, L"\\"); 7 MultiByteToWideChar(CP_UTF8, 0, pfdin->psz1, -1, 8 szFilePath + cchFilePath - cchFile, (int) cchFile + 1); 9 int hf; 10 _wsopen__s(hf, szFilePath, 11 _O_BINARY | _O_CREAT | _O_WRONLY | _O_SEQUENTIAL, 12 _SH_DENYWR, _S_IREAD | _S_IWRITE); 13 return hf szFilePath becomes C:\Extract\Foo\File.txt Then the call to _wsopen__s (line 10) to that file path...well, the directory doesn't exist ('C:\Extract\Foo' [however 'c:\Extract' does]) and this function doesn't create it, so it returns failure and a -1 for "hf". -1 then is returned (line 13) which in this context, means user abort. Hence "SFXCA: Failed to extract to temporary directory. Cabinet error code 11." appears in the MSI log. -----Original Message----- From: Shawn Dwyer [mailto:shawn.o.dw...@gmail.com] Sent: Friday, February 27, 2009 12:07 AM To: General discussion for Windows Installer XML toolset.; Shawn Dwyer Subject: Re: [WiX-users] MakeSfxCA and project output Has anyone gotten this error when using DTF?SFXCA: Failed to extract to temporary directory. Cabinet error code 11. Has anyone managed to pack a directory using another method? Thanks, Shawn On Thu, Feb 26, 2009 at 12:01 AM, Shawn Dwyer <shawn.o.dw...@gmail.com>wrote: > I think I'm getting close but I'm getting an error when unpacking. > > Reading the source for MakeSfxCA I found the GetPackFileMap function and > reading the description: "By default, all files will be placed in the > root of the cab. But inputs may optionally include an alternate inside-cab > file path before an equals sign." > > So this implied to me that on the MakeSfxCA command line, rather than pass > "$(TargetDir)EULAs\ja-JP\Eula.rtf" I could pass "EULAs\ja-JP\Eula.rtf= > $(TargetDir)EULAs\ja-JP\Eula.rtf" > > I beleive the log output of MakeSfxCA confirmed this: > Packaging files > MyInstallerCA.dll > CustomAction.config > Microsoft.Deployment.WindowsInstaller.dll > EULAs\ja-JP\Eula.rtf > > However, when I run my installer I get the following error: > > SFXCA: Extracting custom action to temporary directory: Temp\MSI28AD.tmp-\ > MSI (c) (D0!6C) [23:20:00:013]: Closing MSIHANDLE (2) of type 790531 for > thread 3436 > MSI (c) (D0!6C) [23:20:00:091]: Creating MSIHANDLE (3) of type 790531 for > thread 3436 > *SFXCA: Failed to extract to temporary directory. Cabinet error code 11.* > > Has anyone tried this before and gotten it to work? Is there a better way > to do this? > > > Additionally I figured out how to pack everything in my CA project ouput > directory recursively. I replaced the PackCustomAction taget in the > Wix.CA.targets file with the following. I don't recommend changing this > file since it will get overwritten on the next Wix install, I simply did > this as a shortcut to see if I could get it to work. This could be placed > in any project file or imported from a custom target though. > > <Target Name="AfterBuild"> > > <CreateProperty Value="$(TargetDir)$(TargetCAFileName)"> > <Output TaskParameter="Value" > PropertyName="TargetCAPackage"/> > </CreateProperty> > > <CreateItem Include="$(TargetDir)**\*.*"> > <Output TaskParameter="Include" > ItemName="AllFilesInTargetDir" /> > </CreateItem> > > <CreateItem Include="@(AllFilesInTargetDir)" > Condition=" '%(AllFilesInTargetDir.FullPath)' != > '$(TargetPath)' and '%(AllFilesInTargetDir.FullPath)' != > '$(TargetCAPackage)'" > > <Output TaskParameter="Include" > ItemName="AllDependenciesInTargetDir" /> > </CreateItem> > > <CreateProperty > Value="@(AllDependenciesInTargetDir->'%(RecursiveDir)%(Filename)%(Extension)=%(RecursiveDir)%(Filename)%(Extension)')" > > > <Output TaskParameter="Value" > PropertyName="AllDependenciesInTargetDirList" /> > </CreateProperty> > > <!-- Run the MakeSfxCA.exe CA packaging tool. --> > <Exec Command='"$(MakeSfxCA)" "$(TargetCAPackage)" "$(SfxCADll)" > "$(TargetPath)" "$(AllDependenciesInTargetDirList)"' > WorkingDirectory="$(TargetDir)" /> > > </Target> > > > On Wed, Feb 25, 2009 at 12:07 PM, Shawn Dwyer <shawn.o.dw...@gmail.com>wrote: > >> Hi, >> >> Is there a way to get MakeSfxCA include everything in my CA project ouput >> directory recursively, maintaining folder structure? It seems to me this >> would be the simplest way of ensuring all necessary dependencies are there >> at runtime. >> >> For a simple example say I have my EULAs for each language in a >> subdirectory such as $(TargetDir)\EULAs\ja-JP\Eula.rtf. I'd like this file >> and the folder structure to be there at runtime. >> >> Of course in the above example I could simply flatten the folder structure >> and add the language as part of the file name, but my particular scenario is >> more complicated. >> >> Another example would be to get the dependencies of dependencies. For >> example Project A depends on Project B which depends on Project C. The >> output of C is automatically copied to the output directory of B, and all of >> that to the ouput directory of A. I'd like to someout get that all packaged >> up and available at runtime. >> >> Thanks, >> >> Shawn >> > > ------------------------------------------------------------------------------ Open Source Business Conference (OSBC), March 24-25, 2009, San Francisco, CA -OSBC tackles the biggest issue in open source: Open Sourcing the Enterprise -Strategies to boost innovation and cut costs with open source participation -Receive a $600 discount off the registration fee with the source code: SFAD http://p.sf.net/sfu/XcvMzF8H _______________________________________________ WiX-users mailing list WiX-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/wix-users ------------------------------------------------------------------------------ Open Source Business Conference (OSBC), March 24-25, 2009, San Francisco, CA -OSBC tackles the biggest issue in open source: Open Sourcing the Enterprise -Strategies to boost innovation and cut costs with open source participation -Receive a $600 discount off the registration fee with the source code: SFAD http://p.sf.net/sfu/XcvMzF8H _______________________________________________ WiX-users mailing list WiX-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/wix-users