Thanks John for the investigation, it wasn't obvious to me before what the root 
cause was. So... what this means is, SfxCA just doesn't support subdirectories 
in the CA package. Perhaps I should have documented that limitation but 
honestly I think it was an oversight in the implementation and testing.

If someone really needs that capability, please log a bug on sourceforge. I 
know the DTF bugs have been piling up a bit recently, but I hope to dedicate 
some time soon to getting those cleaned up.

-Jason-

-----Original Message-----
From: John Nannenga [mailto:john.nanne...@microsoft.com] 
Sent: Friday, February 27, 2009 8:57 AM
To: General discussion for Windows Installer XML toolset.
Subject: Re: [WiX-users] MakeSfxCA and project output

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


------------------------------------------------------------------------------
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