Creating Wix Pure patch with Melt.exe and Pyro.exe fails with PYRO0103 errors #4187

Closed
wixbot opened this Issue Nov 14, 2013 · 12 comments

Projects

None yet

3 participants

@wixbot
Collaborator
wixbot commented Nov 14, 2013

I have been testing the 2 patching methods for WiX: Using Patch Creation Properties and Using Purely WiX.
I have created basic samples for both and got both of them working okay so I am now try a real install upgrade patch.

Since I am using the product .msi and .wixpdb files locally instead of from the build machine I have to use melt.exe to extract and generate new .wixpdb files so I use the following cmds:
Melt.exe "1.0\product.msi" -out "1.0x\product.wibpdb" -pdb "1.0\product.wixpdb" -x 1.0x\Productbits
Melt.exe "1.1\product.msi" -out "1.1x\product.wixpdb" -pdb "1.1\product.wixpdb" -x 1.1x\Productbits

Once this step is done I trigger the torch.exe, candle, and light.exe commands to generate the .wixmst and .wixmsp files.

Finally I run the pyro.exe with the -delta parameter on these files to generate the patch and it is at this point it fails with a bunch of PYRO0103 errors. These errors are all referring to files that are missing from the original source directories where they were built from or stored on the build machine. Now these missing files are all binary table entries and merge module .msm entries.

Here is part of my build log and all are referring to binary and merge Id's that are listed in fragment files and referencing the path that our build machine created for the build:
D:\BuildAgent72\work\9f69624fb270635f\BoardSW\install\win\SMART Product Drivers

\Core_x86PNPDrivers.wxs(158) : error PYRO0103 : The system cannot find the file '........\Artifacts\CustomActionDlls\BoardCustomActionMSI.dll'.

\CustomActionsTable.wxs(105) : error PYRO0103 : The system cannot find the file '........\Artifacts\CustomActionDlls\CloseAppsTool.dll'.

\PropertiesTable.wxs(51) : error PYRO0103 : The system cannot find the file '......../BoardSW/Source\SBTools\SMARTHelpButtonQt\resources\SMARTBoardToolsWithShading.ico'.

\Core_Drivers.wxs(207) : error PYRO0103 : The system cannot find the file '......../installs/x86/Release/CoreSharedDrivers.msm'.

\FilesComponentFragment.wxs(15) : error PYRO0103 : The system cannot find the file '......../installs/x86/Release/Diagnostics.msm'.

\FilesComponentFragment.wxs(6) : error PYRO0103 : The system cannot find the file '......../installs/x86/Release/Display Controller.msm'.

\Core_Drivers.wxs(213) : error PYRO0103 : The system cannot find the file '......../artifacts/Merge Modules/smart_document_camera_vc100_3.0.msm'.

Now I do have all the files to reproduce this on Dropbox, but the .zip is quite large, but if you want to review the files and reproduce the results then you can get the .zip file from here:
https://www.dropbox.com/s/uq5v7v9nf0d3wfw/BrdPatch.zip

Using the Patch Creation Properties method works okay when these files so we'll have to go that route until Melt/Pure Wix method can be fixed or there is something that we have to change in our wix installer to fix this issue.

Thanks.

Originally opened by timm

@wixbot
Collaborator
wixbot commented Nov 14, 2013

Originally changed by barnson
AssignedTo set to bobarnson
Release changed from v3.8 to v3.x

@wixbot
Collaborator
wixbot commented Dec 9, 2013

I've been playing a little with the melt source code and it seems that adding

// extract files from the .msi and get the path map of File ids to target paths
string outputDirectory = this.exportBasePath ?? Environment.GetEnvironmentVariable("WIX_TEMP");
IDictionary<string, string> paths = null;
using (InstallPackage package = new InstallPackage(this.inputFile, DatabaseOpenMode.ReadOnly, null, outputDirectory))
{
    package.ExtractFiles();
+++++                package.ExportAll(outputDirectory);
    paths = package.Files.SourcePaths;
}

Successfully exports the files needed from the Binary, _Streams, Icon, and WITEMP folders.

I run into two issues now,
-Every file has a ".ibd" extension. Easy enough to get around
-Database.ExportAll throws an exception (Illegal characters in path.) for the stream, "�|DigitalSignature" (notice the pipe at the beginning). I've added a try/catch{/GULP/} around the Path combine in there to get around this but it is an inglorious hack that I do not want to use long term :)

Looking to update the melt code now to rename the files and the paths in the binary table's rows accordingly. Can anyone suggest a way around the exception in the ExportAll call?

Originally posted by scubasteve

@wixbot
Collaborator
wixbot commented Dec 9, 2013

I've been playing a little with the melt source code and it seems that adding

// extract files from the .msi and get the path map of File ids to target paths
string outputDirectory = this.exportBasePath ?? Environment.GetEnvironmentVariable("WIX_TEMP");
IDictionary<string, string> paths = null;
using (InstallPackage package = new InstallPackage(this.inputFile, DatabaseOpenMode.ReadOnly, null, outputDirectory))
{
    package.ExtractFiles();
+++++                package.ExportAll(outputDirectory);
    paths = package.Files.SourcePaths;
}

Successfully exports the files needed from the Binary, _Streams, Icon, and WITEMP folders.

I run into two issues now,
-Every file has a ".ibd" extension. Easy enough to get around
-Database.ExportAll throws an exception (Illegal characters in path.) for the stream, "�|DigitalSignature" (notice the pipe at the beginning). I've added a try/catch{/GULP/} around the Path combine in there to get around this but it is an inglorious hack that I do not want to use long term :)

Looking to update the melt code now to rename the files and the paths in the binary table's rows accordingly. Can anyone suggest a way around the exception in the ExportAll call?

Originally posted by scubasteve

@wixbot
Collaborator
wixbot commented Dec 9, 2013

I've been playing a little with the melt source code and it seems that adding

// extract files from the .msi and get the path map of File ids to target paths
string outputDirectory = this.exportBasePath ?? Environment.GetEnvironmentVariable("WIX_TEMP");
IDictionary<string, string> paths = null;
using (InstallPackage package = new InstallPackage(this.inputFile, DatabaseOpenMode.ReadOnly, null, outputDirectory))
{
    package.ExtractFiles();
+++++                package.ExportAll(outputDirectory);
    paths = package.Files.SourcePaths;
}

Successfully exports the files needed from the Binary, _Streams, Icon, and WITEMP folders.

I run into two issues now,
-Every file has a ".ibd" extension. Easy enough to get around
-Database.ExportAll throws an exception (Illegal characters in path.) for the stream, "�|DigitalSignature" (notice the pipe at the beginning). I've added a try/catch{/GULP/} around the Path combine in there to get around this but it is an inglorious hack that I do not want to use long term :)

Looking to update the melt code now to rename the files and the paths in the binary table's rows accordingly. Can anyone suggest a way around the exception in the ExportAll call?

Originally posted by scubasteve

@wixbot
Collaborator
wixbot commented Dec 9, 2013

I've been playing a little with the melt source code and it seems that adding

// extract files from the .msi and get the path map of File ids to target paths
string outputDirectory = this.exportBasePath ?? Environment.GetEnvironmentVariable("WIX_TEMP");
IDictionary<string, string> paths = null;
using (InstallPackage package = new InstallPackage(this.inputFile, DatabaseOpenMode.ReadOnly, null, outputDirectory))
{
    package.ExtractFiles();
+++++                package.ExportAll(outputDirectory);
    paths = package.Files.SourcePaths;
}

Successfully exports the files needed from the Binary, _Streams, Icon, and WITEMP folders.

I run into two issues now,
-Every file has a ".ibd" extension. Easy enough to get around
-Database.ExportAll throws an exception (Illegal characters in path.) for the stream, "|DigitalSignature" (notice the pipe at the beginning). I've added a try/catch{/GULP/} around the Path combine in there to get around this but it is an inglorious hack that I do not want to use long term :)

Looking to update the melt code now to rename the files and the paths in the binary table's rows accordingly. Can anyone suggest a way around the exception in the ExportAll call?

Originally posted by scubasteve

@wixbot
Collaborator
wixbot commented Dec 9, 2013

Posting to triage for scubasteve.

Originally posted by firegiantco
Status changed from Open to Untriaged

@wixbot
Collaborator
wixbot commented Dec 9, 2013

Test comment to reproduce issue.

Originally posted by firegiantco

@wixbot
Collaborator
wixbot commented Dec 10, 2013

Originally changed by barnson
AssignedTo changed from bobarnson to

@wixbot
Collaborator
wixbot commented Dec 27, 2013

Originally changed by bmurri
AssignedTo set to wixsupport

@wixbot
Collaborator
wixbot commented Jun 5, 2014

Quick question, timm;

Do you have a !(bindpath.???) in your installers?

Originally posted by scubasteve

@wixbot wixbot added this to the v3.x milestone Dec 20, 2015
@stunney
stunney commented May 17, 2016

Pretty sure this bug can be closed

@barnson
Member
barnson commented May 18, 2016

Agreed, thanks.

@barnson barnson closed this May 18, 2016
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment