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

Reply via email to