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:[email protected]]
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 <[email protected]>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 <[email protected]>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
[email protected]
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
[email protected]
https://lists.sourceforge.net/lists/listinfo/wix-users