Hi, I have had an interesting experience with delivering an MSI and
getting a 1603 error.

Basically, I had an MSI, a patch for the MSI (MSP) and I had also created
a transform in InstallShild Admin Studio.

When I put them in an icon and tried to install it I got the generic 1603
error whether it was on a locked down envionment or not.

When I took the patch out the install worked fine, and when I put the
patch back in and took the transform out of the app, the install also
worked fine.

After looking at the MSI debug logs I saw the error I was getting was:
2251 Database: [2] Transform: Cannot delete row that doesn't exist.
Table: [3]
(This was referring to the directory table.)

In the original transform I had deleted the shortcuts the app creates on
the Start Menu so they wouldn't get installed. What NAL was trying to do
was apply this transform to the patch. Since the Shortcuts didn't exist
in the patch, the error above was returned.

I confirmed this by creating a new transform that was exactly the same as
the first one, except I left the shortcuts in. Everything then installed
fine. (I was able to use a post distrubtion script to remove the

I can also see in the debug log for the patch that it is trying to use
the transform.

From my understanding the patch shouldn't be looking at the transform? It
should be looking at what is installed an just updating the necessary

My question is this, how is NAL actually working in relation to patches?
Is it calling msiexec with the msi transform and patches all in one
command line? (Like I think it should be)
Or is it calling msiexec with the transform name and then calling the
patch with the transform name? (In which case is this a bug?)

This might be a reason for some of the other 1603 errors people have been
experiencing, but based on their transform, they might be getting
different detailed errors.

Can someone shed some light on this for me?