[wix-users] DB not getting created in Program Files (x86) folder

Edwin Castro egcastr at gmail.com
Thu Aug 16 08:20:07 PDT 2018


Is SQLUser the user you use to connect to the database OR is it the user
that runs the database service? There is very likely a difference.

You originally used SQLUser in SqlDatabase so I expect that is the user
that connects to the database. For example, without windows authentication
enabled it could be the sa user. With windows authentication enabled it
would likely be an administrative account of some kind.

The user for the folder permissions needs to be the user that runs the sql
server service. By default that user is SYSTEM or LOCAL SERVICE or
something similar. It could also be some other service account.

My point is that those two users are most likely different users. If
windows authentication is disabled, then it is guaranteed for those users
to be different. You need to get SQLUser *and* SQLServiceUser from the
user. I don't think you need a password for SQLServiceUser in order to use
it for setting permissions on a folder.

*AND* all of this still requires you are installing this MSI on the same
system where SQL Server is installed.

--
Edwin G. Castro

On Thu, Aug 16, 2018, 03:39 Ven H <venh.123 at gmail.com> wrote:

> Thanks a lot for the detailed explanation, Edwin. I corrected that typo
> you pointed out, but then also, I am got the same issue. So, I modified the
> Product.wxs as below, but still no luck.
>
> <?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="8EFD525A-303F-4836-8D64-2A0EEB982AA2" Name="DBPathSample"
> Language="1033" Version="1.0.0.0" Manufacturer="DB_PATH_SAMPLE"
> UpgradeCode="ebd87ab3-1834-4b6e-a473-86d61d3d5334">
> <Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine"
> />
>
> <MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is
> already installed." />
> <MediaTemplate EmbedCab="yes" />
>
>     <Property Id="MSIUSEREALADMINDETECTION" Value="1" />
>     <Property Id="MSIFASTINSTALL" Value="1"/>
>     <Property Id="MsiLogging" Value="v" />
>     <Property Id="MSIENFORCEUPGRADECOMPONENTRULES" Value="1" />
>
>     <Property Id="SQL_SERVER_INSTANCE" Value="MySqlServer"/>
>     <Property Id="SQL_LOGIN_NAME" Value="SysAdmin"/>
>     <Property Id="SQL_LOGIN_PASSWORD" Value="SA_Pwd"/>
>
> <Feature Id="ProductFeature" Title="DBPathSample" Level="1">
> <ComponentGroupRef Id="ProductComponents" />
> </Feature>
> </Product>
>
> <Fragment>
> <Directory Id="TARGETDIR" Name="SourceDir">
> <Directory Id="ProgramFilesFolder">
>         <Directory Id="INSTALLFOLDER" Name="DBPathSample" />
> </Directory>
> </Directory>
> </Fragment>
>
> <Fragment>
>     <util:User Id="SQLUser" Name="[SQL_LOGIN_NAME]"
> Password="[SQL_LOGIN_PASSWORD]" />
> <ComponentGroup Id="ProductComponents">
> <Component Id="dbComp1" Guid="2D846C0A-BD4C-47C8-9D67-3B749DD32180"
> Directory="INSTALLFOLDER" KeyPath="yes">
>         <CreateFolder>
>           <util:PermissionEx User ="SQLUser" GenericAll ="yes"
> ChangePermission ="yes" TakeOwnership ="yes" GenericExecute ="yes"
> Read="yes" GenericWrite ="yes" GenericRead ="yes" ReadPermission ="yes" />
>         </CreateFolder>
>         <sql:SqlDatabase Id="msiTestDB1" Database="Test_Path_DB"
> Server="[SQL_SERVER_INSTANCE]" CreateOnInstall="yes" User="SQLUser" >
>
>           <sql:SqlFileSpec Id="tpDataFile"
> Filename="[INSTALLFOLDER]tpData.mdf" Name="tpData.mdf" Size="3072KB"
> MaxSize="10MB" GrowthSize="10%"/>
>           <sql:SqlLogFileSpec Id="tpLogFile"
> Filename="[INSTALLFOLDER]tpLog.ldf" Name="tpLog.ldf" Size="2048KB"
> MaxSize="10MB" GrowthSize="10%"/>
>         </sql:SqlDatabase>
>       </Component>
> </ComponentGroup>
> </Fragment>
> </Wix>
>
> Any inputs? Please advise.
>
>
>
> On Wed, Aug 15, 2018 at 9:15 PM, Edwin Castro <egcastr at gmail.com> wrote:
>
>> I have very limited experience with SqlDatabase so take everything I say
>> with a grain of salt.
>>
>> First, the database will be created at [SQL_SERVER_INSTANCE] which could
>> be a different, remote system than the one where the MSI was installed
>> depending on user input. If the target server is indeed a different, remote
>> system, then [INSTALLFOLDER] will not exist on that remote system since the
>> folder will only be created locally on the system where the MSI was
>> installed.
>>
>> Next, assuming the MSI is installed on the same system where SQL Server
>> is installed, then the mdf and ldf files are not created by WiX or the
>> Windows installer. Rather they are created by the service account under
>> which that SQL Server instance is running. You'd need to ensure that
>> particular user is given appropriate permissions probably GenericAll (but
>> check the SQL Server documentation for requirements) using
>> util:PermissionEx. Of course you'll need to be told which user is running
>> the SQL Server instance. Note I'm talking about the service account you see
>> listed in services.msc and not the user you use to connect to the SQL
>> Server instance.
>>
>> Again, none of this matters if your dealing with a remote system and
>> Windows Installer won't help you with remote systems. You'd have to create
>> your own custom actions to create the folder on the remote system as well
>> as assign any required permissions.
>>
>> I don't know if this matters but you have Name="tpLog.mdf" for the ldf
>> file instead of Name="tpLog.ldf".
>>
>> Back in the day, when I automated database installs and upgrades, we used
>> PowerShell to automate the various actions required instead of using MSI.
>> We considered very briefly to install the database automation with MSI but
>> quickly decided that didn't actually provide us any value as the automation
>> could be used from any system that had network access to SQL Server. We
>> couldn't install the MSI on the SQL Server instance so it didn't make sense
>> to "install" a database MSI on a system that didn't have the database on
>> it...
>>
>> --
>> Edwin G. Castro
>>
>>
>> On Wed, Aug 15, 2018, 04:58 Ven H <venh.123 at gmail.com> wrote:
>>
>>> Please find the Product.wxs below.
>>>
>>> <?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="8EFD525A-303F-4836-8D64-2A0EEB982AA2" Name="DBPathSample"
>>> Language="1033" Version="1.0.0.0" Manufacturer="DB_PATH_SAMPLE"
>>> UpgradeCode="ebd87ab3-1834-4b6e-a473-86d61d3d5334">
>>> <Package InstallerVersion="200" Compressed="yes"
>>> InstallScope="perMachine" />
>>>
>>> <MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is
>>> already installed." />
>>> <MediaTemplate EmbedCab="yes" />
>>>
>>>     <Property Id="MSIUSEREALADMINDETECTION" Value="1" />
>>>     <Property Id="MSIFASTINSTALL" Value="1"/>
>>>     <Property Id="MsiLogging" Value="v" />
>>>     <Property Id="MSIENFORCEUPGRADECOMPONENTRULES" Value="1" />
>>>
>>>     <Property Id="SQL_SERVER_INSTANCE" Value="MySQLServer"/>
>>>     <Property Id="SQL_LOGIN_NAME" Value="Admin"/>
>>>     <Property Id="SQL_LOGIN_PASSWORD" Value="AdminPwd"/>
>>>
>>> <Feature Id="ProductFeature" Title="DBPathSample" Level="1">
>>> <ComponentGroupRef Id="ProductComponents" />
>>> </Feature>
>>> </Product>
>>>
>>> <Fragment>
>>> <Directory Id="TARGETDIR" Name="SourceDir">
>>> <Directory Id="ProgramFilesFolder">
>>> <Directory Id="INSTALLFOLDER" Name="DBPathSample" />
>>> </Directory>
>>> </Directory>
>>> </Fragment>
>>>
>>> <Fragment>
>>>     <util:User Id="SQLUser" Name="[SQL_LOGIN_NAME]"
>>> Password="[SQL_LOGIN_PASSWORD]" />
>>> <ComponentGroup Id="ProductComponents">
>>> <Component Id="dbComp1" Guid="2D846C0A-BD4C-47C8-9D67-3B749DD32180"
>>> Directory="INSTALLFOLDER" KeyPath="yes">
>>>         <sql:SqlDatabase Id="msiTestDB1" Database="Test_Path_DB"
>>> Server="[SQL_SERVER_INSTANCE]" CreateOnInstall="yes" User="SQLUser" >
>>>
>>>           <sql:SqlFileSpec Id="tpDataFile"
>>> Filename="[INSTALLFOLDER]tpData.mdf" Name="tpData.mdf" Size="3072KB"
>>> MaxSize="10MB" GrowthSize="10%"/>
>>>           <sql:SqlLogFileSpec Id="tpLogFile"
>>> Filename="[INSTALLFOLDER]tpLog.ldf" Name="tpLog.mdf" Size="2048KB"
>>> MaxSize="10MB" GrowthSize="10%"/>
>>>         </sql:SqlDatabase>
>>>       </Component>
>>> </ComponentGroup>
>>> </Fragment>
>>> </Wix>
>>>
>>> Error in the Log below.
>>>
>>> Line 502: CreateDatabase:  Error 0x80004005: failed to create to
>>> database: 'Test_Path_DB', error: unknown error
>>> Line 505: Error 26201. Error -2147467259: failed to create SQL database:
>>> Test_Path_DB, error detail: unknown error.
>>> Line 506: MSI (s) (E4!2C) [04:42:40:308]: Product: DBPathSample -- Error
>>> 26201. Error -2147467259: failed to create SQL database: Test_Path_DB,
>>> error detail: unknown error.
>>>
>>> This won't be due to space since there is more than 2 GB space in that
>>> drive. I have other similar samples where DB gets created in other folders,
>>> which also rules out the possibility of issues with SQL settings. Hence I
>>> came to the conclusion that it may be a permission issue.
>>>
>>>
>>>
>>>
>>> On Tue, Aug 14, 2018 at 12:03 AM, Edwin Castro <egcastr at gmail.com>
>>> wrote:
>>>
>>>> Let's begin with:
>>>>
>>>> what is your wix authoring for this?
>>>> what is the actual error in log?
>>>> what specifically leads you to believe it is a permission issue?
>>>> what have you tried to resolve the suspected permission issue?
>>>>
>>>> --
>>>> Edwin G. Castro
>>>>
>>>>
>>>> On Mon, Aug 13, 2018 at 9:45 AM, Ven H via wix-users <
>>>> wix-users at lists.wixtoolset.org> wrote:
>>>>
>>>>> When I give the path for creating the DB (data and log files) in
>>>>> Program
>>>>> Files (x86) folder in my MSI, I always get an error in the log, which
>>>>> is
>>>>> not so helpful for troubleshooting. Initially, I thought, this could
>>>>> be due
>>>>> to space, but tried on a server with lots of space, but there also, I
>>>>> get
>>>>> the same issue. Upon some searching I found that it is because of
>>>>> permission, but I am not sure how to fix it. Can anyone please help?
>>>>>
>>>>> ____________________________________________________________________
>>>>> WiX Toolset Users Mailing List provided by FireGiant
>>>>> http://www.firegiant.com/
>>>>>
>>>>
>>>>
>>>
>


More information about the wix-users mailing list