[wix-users] Patch for DB(SqlScript) with no Uninstall option available
David Watson
dwatson at sdl.com
Tue Jun 12 01:37:56 PDT 2018
Install your sql scripts somewhere and use the sql file as the keypath. Also handy for manual db preparation in locked down environments.
www.sdl.com
SDL PLC confidential, all rights reserved. If you are not the intended recipient of this mail SDL requests and requires that you delete it without acting upon or copying any of its contents, and we further request that you advise us.
SDL PLC is a public limited company registered in England and Wales. Registered number: 02675207.
Registered address: SDL PLC, New Globe House, Vanwall Business Park, Vanwall Road, Maidenhead, SL6 4UB, U.K.
-----Original Message-----
From: wix-users <wix-users-bounces at lists.wixtoolset.org> On Behalf Of Ven H via wix-users
Sent: 11 June 2018 18:22
To: Edwin Castro <egcastr at gmail.com>
Cc: Ven H <venh.123 at gmail.com>; WiX Toolset Users Mailing List <wix-users at lists.wixtoolset.org>
Subject: Re: [wix-users] Patch for DB(SqlScript) with no Uninstall option available
Yes Edwin. You are right. It is adding entry into the CreateFolder table.
Is there a way to avoid it? I tried not having the KeyPath attribute by having something like this. But still, no luck. Not sure how to get it working. Without <CreateFolder /> element, it doesn't compile, even though there is no KeyPath.
<DirectoryRef Id="INSTALLFOLDER">
<Component Id="dbComp1" Guid="B4E70B72-DB9C-4215-B4DF-022B56A26C01">
<CreateFolder />
<sql:SqlDatabase Id="msiTestDB1" Database="[SQLDB]"
Server="[SQLSERVER]" Instance="[SQLINSTANCE]" CreateOnInstall="yes"
User="SQLUser" />
<sql:SqlScript BinaryKey="binCreateTbl" Id="script_CreateTbl"
ExecuteOnInstall="yes" ExecuteOnReinstall="yes" ContinueOnError="no"
SqlDb="msiTestDB1" Sequence="1" />
</Component>
</DirectoryRef>
Regards,
Venkatesh
On Mon, Jun 11, 2018 at 9:50 PM, Edwin Castro <egcastr at gmail.com> wrote:
> I haven't tried to reproduce this locally but I suspect that
> Component/@KeyPath="yes" is automatically adding the Directory for the
> component into the CreateFolder table for the new component. The
> CreateFolder table is listed as one of the tables that makes a patch
> not-uninstallable. You should have been able to see this easily if you
> had checked each of those tables and compared between the old and new MSIs.
>
> https://msdn.microsoft.com/en-us/library/windows/desktop/
> aa372102(v=vs.85).aspx
>
> As you have you have already found out, your patch will be
> uninstallable if you follow the rules specified in the link above.
> Again, I recommend using a tool like Orca and/or InstEdit
> (http://www.instedit.com/) to compare your old and new MSI and ensure
> that you're following all the rules spelled out in the link above.
>
> --
> Edwin G. Castro
>
>
>
>
> On Mon, Jun 11, 2018 at 8:58 AM, Ven H via wix-users <
> wix-users at lists.wixtoolset.org> wrote:
>
>> I had a small finding (from the link below). If the KeyPath attribute
>> is at the Component level and not at the file level and if we add
>> such a new Component in the new MSI for patch, then the Uninstall
>> option gets disappeared. So, for regular files, if we put the KeyPath
>> attribute at file level rather than at the Component level, then
>> Uninstall option is available. But, for SqlScripts, since there is no
>> KeyPath attribute, these options are ruled out. I am still struggling
>> with the Uninstall option getting disappeared after Patch
>> installation in case of SqlScript with a new component added in the
>> new msi for patch.
>>
>> https://stackoverflow.com/questions/29752633/how-to-correctl
>> y-add-new-files-in-wix-installation-to-create-an-uninstallable-pa
>>
>>
>> On Tue, Jun 5, 2018 at 10:13 PM, Ven H <venh.123 at gmail.com> wrote:
>>
>> > As asked by Edwin, I am providing the description for my 2nd
>> > problem, where the Uninstall option is not available. Sorry for the
>> > long email,
>> but
>> > I wanted to be as descriptive as possible.
>> >
>> > Basically, I have a Visual Studio MSI project with a Sample.txt and
>> > CREATE_TABLE.sql files at the root level. The Sample.txt has a text
>> "This
>> > is version 1.0.0." and nothing else and the CREATE_TABLE.sql has an
>> > SQL statement to create a table as below.
>> >
>> > CREATE_TABLE.sql
>> >
>> > use TestDB
>> > go
>> >
>> > if not exists( select 1 from information_schema.tables where
>> > table_name
>> =
>> > 'EMPLOYEES' )
>> > begin
>> > create table dbo.EMPLOYEES
>> > (
>> > EMP_ID INT NOT NULL,
>> > EMP_NAME NVARCHAR(100) NOT NULL
>> > )
>> > end
>> > go
>> >
>> >
>> > Product.wxs for v1.0.0
>> >
>> > <?xml version="1.0" encoding="UTF-8"?> <Wix
>> > xmlns="http://schemas.microsoft.com/wix/2006/wi" xmlns:util="
>> > http://schemas.microsoft.com/wix/UtilExtension" xmlns:sql="
>> > http://schemas.microsoft.com/wix/SqlExtension">
>> > <Product Id="F3374DBE-A524-44FA-9052-4C6F88249F10" Name="DBPatchSample"
>> > Language="1033" Version="1.0.0.0" Manufacturer="DB_Patch_Sample"
>> > UpgradeCode="42855AC1-CE52-4366-B419-83503155C417">
>> > <Package InstallerVersion="200" Compressed="yes"
>> InstallScope="perMachine"
>> > />
>> >
>> > <MajorUpgrade DowngradeErrorMessage="A newer version of
>> > [ProductName] is already installed." /> <MediaTemplate
>> > EmbedCab="yes" />
>> >
>> > <util:User Id="SQLUser" Name="[SQLUSER]" Password="[SQLPASSWORD]" />
>> > <Binary Id="binCreateTbl" SourceFile="CREATE_TABLE.sql" />
>> >
>> > <Property Id="MSIUSEREALADMINDETECTION" Value="1" />
>> > <Property Id="MSIFASTINSTALL" Value="1"/>
>> > <Property Id="MsiLogging" Value="v" />
>> > <Property Id="MSIENFORCEUPGRADECOMPONENTRULES" Value="1" />
>> > <Property Id="SQLSERVER" Value="SqlServerName"/>
>> > <Property Id="SQLINSTANCE" Value="SqlInstanceName"/>
>> > <Property Id="SQLDB" Value="TestDB"/>
>> > <Property Id="SQLUSER" Value="sa"/>
>> > <Property Id="SQLPASSWORD" Value="Sa_Password"/>
>> >
>> > <Feature Id="ProductFeature" Title="DBPatchSample" Level="1">
>> > <ComponentGroupRef Id="DbCG" /> </Feature>
>> > <UI Id="MyWixUI_Mondo">
>> > <UIRef Id="WixUI_Mondo" />
>> > </UI>
>> > <UIRef Id="WixUI_ErrorProgressText" /> </Product>
>> >
>> > <Fragment>
>> > <Directory Id="TARGETDIR" Name="SourceDir"> <Directory
>> > Id="ProgramFilesFolder"> <Directory Id="INSTALLFOLDER"
>> > Name="DBPatchSample" /> </Directory> </Directory> </Fragment>
>> >
>> > <Fragment>
>> > <ComponentGroup Id="DbCG">
>> > <Component Id="fileComp" Guid="92526A26-9404-449B-9EAA-
>> 7FC175F2EBE4"
>> > Directory="INSTALLFOLDER" KeyPath="yes">
>> > <File Id="sampleTxt" Name="Sample.txt" Source="Sample.txt" />
>> > </Component>
>> > <Component Id="dbComp1" Guid="B4E70B72-DB9C-4215-B4DF-
>> 022B56A26C01"
>> > Directory="INSTALLFOLDER" KeyPath="yes">
>> > <sql:SqlDatabase Id="msiTestDB1" Database="[SQLDB]"
>> > Server="[SQLSERVER]" Instance="[SQLINSTANCE]" CreateOnInstall="yes"
>> > User="SQLUser" />
>> > <sql:SqlScript BinaryKey="binCreateTbl" Id="script_CreateTbl"
>> > ExecuteOnInstall="yes" ContinueOnError="no" SqlDb="msiTestDB1"
>> > Sequence="1" />
>> > </Component>
>> > </ComponentGroup>
>> > </Fragment>
>> > </Wix>
>> >
>> > With this, I created an MSI and installed it. It does create the
>> > table with the two columns in it. In the C:\Program
>> > Files(x86)\DBPatchSample folder, I could find only the Sample.txt
>> > file and not the
>> CREATE_TABLE.sql.
>> > This is probably because the sql file is a binary and has been set
>> > to execute on install.
>> >
>> > In my bin/debug folder, I created 3 folders namely 1.0.0, 1.0.1 and
>> Patch.
>> > Within 1.0.0 folder and 1.0.1 folders, I created a folder called
>> "admin".
>> > In the Patch folder, I copied my Patch.wxs, whose markup is as
>> > given
>> below.
>> > Then I moved the first MSI to 1.0.0 folder.
>> >
>> > Patch.wxs
>> >
>> > <?xml version="1.0" encoding="UTF-8"?><Wix xmlns="
>> http://webdefence.global.blackspider.com/urlwrap/?q=AXicY2Rm8FrCwHB9A
>> QNDUU6lkUmiXnFRmV5uYmZOcn5eSVF-jl5yfi5DuamTh2-QsZGBkYmFqRFDSnliSXF-nk
>> NxCkQ6o6SkwEpfvzg5IzU3sVgvNzO5KL84P42BgaFzCgMDABfEH5g&Z
>> > t.com/wix/2006/wi">
>> > <PatchCreation WholeFilesOnly="yes" CleanWorkingFolder="yes"
>> > OutputPath="patch.pcp" Id="224C316C-5894-4771-BABF-21A3AC1F75FF">
>> > <PatchInformation Description="Patch Info Description"
>> Comments="Patch
>> > Info Comments" Manufacturer="DB_Patch_Sample" Languages="1033"
>> > ShortNames="no" Compressed="yes"/>
>> > <PatchMetadata Description="Patch Metadata Description"
>> > ManufacturerName="DB_Patch_Sample" MoreInfoURL="URL_Here"
>> > AllowRemoval="yes" Classification="Update" DisplayName="DB Patch
>> > Sample Patch" TargetProductName="DBPatchSample"/>
>> > <Family MediaSrcProp="Sample" SequenceStart="5000" DiskId="5000"
>> > Name="Sample">
>> > <UpgradeImage SourceFile="D:\MyProjects\WIX\
>> > DBPatchSample\bin\Debug\1.0.1\admin\DBPatchSample.msi"
>> Id="SampleUpgrade">
>> > <TargetImage Order="2" IgnoreMissingFiles="no"
>> > SourceFile="D:\MyProjects\WIX\DBPatchSample\bin\Debug\1.0.0\
>> admin\DBPatchSample.msi"
>> > Id="SampleTarget"/>
>> > </UpgradeImage>
>> > </Family>
>> > <PatchSequence Supersede="yes" PatchFamily="SamplePatchFamily"
>> > Sequence="1.0.0.0"/>
>> > </PatchCreation>
>> > </Wix>
>> >
>> > Now, to create the 1.0.1, I added a new file called CREATE_TABLE_1
>> >
>> > CREATE_TABLE_1.sql
>> >
>> > use TestDB
>> > go
>> >
>> > if not exists( select 1 from information_schema.tables where
>> > table_name
>> =
>> > 'EMPLOYEES1' )
>> > begin
>> > create table dbo.EMPLOYEES1
>> > (
>> > EMP_ID INT NOT NULL,
>> > EMP_NAME NVARCHAR(100) NOT NULL
>> > )
>> > end
>> > go
>> >
>> > Product.wxs for v1.0.1
>> >
>> > <?xml version="1.0" encoding="UTF-8"?> <Wix
>> > xmlns="http://schemas.microsoft.com/wix/2006/wi" xmlns:util="
>> > http://schemas.microsoft.com/wix/UtilExtension" xmlns:sql="
>> > http://schemas.microsoft.com/wix/SqlExtension">
>> > <Product Id="F3374DBE-A524-44FA-9052-4C6F88249F10" Name="DBPatchSample"
>> > Language="1033" Version="1.0.1.0" Manufacturer="DB_Patch_Sample"
>> > UpgradeCode="42855AC1-CE52-4366-B419-83503155C417">
>> > <Package InstallerVersion="200" Compressed="yes"
>> InstallScope="perMachine"
>> > />
>> >
>> > <MajorUpgrade DowngradeErrorMessage="A newer version of
>> > [ProductName] is already installed." /> <MediaTemplate
>> > EmbedCab="yes" />
>> >
>> > <util:User Id="SQLUser" Name="[SQLUSER]" Password="[SQLPASSWORD]" />
>> > <Binary Id="binCreateTbl" SourceFile="CREATE_TABLE.sql" />
>> > <Binary Id="binCreateTbl1" SourceFile="CREATE_TABLE_1.sql" />
>> >
>> > <Property Id="MSIUSEREALADMINDETECTION" Value="1" />
>> > <Property Id="MSIFASTINSTALL" Value="1"/>
>> > <Property Id="MsiLogging" Value="v" />
>> > <Property Id="MSIENFORCEUPGRADECOMPONENTRULES" Value="1" />
>> > <Property Id="SQLSERVER" Value="SqlServerName"/>
>> > <Property Id="SQLINSTANCE" Value="SqlInstanceName"/>
>> > <Property Id="SQLDB" Value="TestDB"/>
>> > <Property Id="SQLUSER" Value="sa"/>
>> > <Property Id="SQLPASSWORD" Value="Sa_Password"/>
>> >
>> > <Feature Id="ProductFeature" Title="DBPatchSample" Level="1">
>> > <ComponentGroupRef Id="DbCG" /> </Feature>
>> > <UI Id="MyWixUI_Mondo">
>> > <UIRef Id="WixUI_Mondo" />
>> > </UI>
>> > <UIRef Id="WixUI_ErrorProgressText" /> </Product>
>> >
>> > <Fragment>
>> > <Directory Id="TARGETDIR" Name="SourceDir"> <Directory
>> > Id="ProgramFilesFolder"> <Directory Id="INSTALLFOLDER"
>> > Name="DBPatchSample" /> </Directory> </Directory> </Fragment>
>> >
>> > <Fragment>
>> > <ComponentGroup Id="DbCG">
>> > <Component Id="fileComp" Guid="92526A26-9404-449B-9EAA-
>> 7FC175F2EBE4"
>> > Directory="INSTALLFOLDER" KeyPath="yes">
>> > <File Id="sampleTxt" Name="Sample.txt" Source="Sample.txt" />
>> > </Component>
>> > <Component Id="dbComp1" Guid="B4E70B72-DB9C-4215-B4DF-
>> 022B56A26C01"
>> > Directory="INSTALLFOLDER" KeyPath="yes">
>> > <sql:SqlDatabase Id="msiTestDB1" Database="[SQLDB]"
>> > Server="[SQLSERVER]" Instance="[SQLINSTANCE]" CreateOnInstall="yes"
>> > User="SQLUser" />
>> > <sql:SqlScript BinaryKey="binCreateTbl" Id="script_CreateTbl"
>> > ExecuteOnInstall="yes" ContinueOnError="no" SqlDb="msiTestDB1"
>> > Sequence="1" />
>> > </Component>
>> > <Component Id="dbComp2" Guid="968CEE51-8A35-47F1-89C4-
>> 38C7C159B831"
>> > Directory="INSTALLFOLDER" KeyPath="yes">
>> > <sql:SqlScript BinaryKey="binCreateTbl1" Id="script_CreateTbl1"
>> > ExecuteOnInstall="yes" ContinueOnError="no" SqlDb="msiTestDB1"
>> Sequence="2"
>> > />
>> > </Component>
>> > </ComponentGroup>
>> > </Fragment>
>> > </Wix>
>> >
>> > I rebuilt this MSI and moved it inside 1.0.1 folder.
>> >
>> > Then I ran the following commands to create the Patch in a command
>> prompt
>> > after changing to the appropriate directory (I am using PCP
>> > approach for Patch).
>> >
>> > msiexec.exe /a 1.0.0\DBPatchSample.msi /qb
>> TARGETDIR=D:\MyProjects\WIX\DB
>> > PatchSample\bin\Debug\1.0.0\admin
>> >
>> > msiexec.exe /a 1.0.1\DBPatchSample.msi /qb
>> TARGETDIR=D:\MyProjects\WIX\DB
>> > PatchSample\bin\Debug\1.0.1\admin
>> >
>> > candle.exe Patch\patch.wxs
>> >
>> > light.exe patch.wixobj -out patch\patch.pcp
>> >
>> > msimsp.exe -s patch\patch.pcp -p patch\patch.msp -l patch.log
>> >
>> > After I installed the Patch, the Uninstall option is not available
>> > for this Patch in the Installed Updates in the ARP.
>> >
>> > Can anyone please help me with this?
>> >
>>
>> ____________________________________________________________________
>> WiX Toolset Users Mailing List provided by FireGiant
>> http://www.firegiant.com/
>>
>
>
____________________________________________________________________
WiX Toolset Users Mailing List provided by FireGiant http://www.firegiant.com/
More information about the wix-users
mailing list