Skip to content

Commit c856313

Browse files
committed
Add DirBrowseFlags to IisWebDirProperties
Fixes wixtoolset/issues#170 Fixes wixtoolset/issues#2637 Fixes wixtoolset/issues#2917 Signed-off-by: Bevan Weiss <bevan.weiss@gmail.com>
1 parent 523c66a commit c856313

File tree

16 files changed

+788
-336
lines changed

16 files changed

+788
-336
lines changed

src/ext/Iis/ca/sca.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,7 @@ enum IIS_CONFIG_ACTION
7575
IIS_DIRPROP_CACHECUST,
7676
IIS_DIRPROP_NOCUSTERROR,
7777
IIS_DIRPROP_LOGVISITS,
78+
IIS_DIRPROP_BROWSEFLAGS,
7879
IIS_DIRPROP_END,
7980
IIS_WEBLOG,
8081
IIS_FILTER_BEGIN,

src/ext/Iis/ca/scasched.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ LPCWSTR vcsWebErrorQuery =
2323
L"SELECT `ErrorCode`, `SubCode`, `ParentType`, `ParentValue`, `File`, `URL` "
2424
L"FROM `Wix4IIsWebError` ORDER BY `ErrorCode`, `SubCode`";
2525

26-
LPCWSTR vcsWebDirPropertiesQuery = L"SELECT `DirProperties`, `Access`, `Authorization`, `AnonymousUser_`, `IIsControlledPassword`, `LogVisits`, `Index`, `DefaultDoc`, `AspDetailedError`, `HttpExpires`, `CacheControlMaxAge`, `CacheControlCustom`, `NoCustomError`, `AccessSSLFlags`, `AuthenticationProviders` "
26+
LPCWSTR vcsWebDirPropertiesQuery = L"SELECT `DirProperties`, `Access`, `Authorization`, `AnonymousUser_`, `IIsControlledPassword`, `LogVisits`, `Index`, `DefaultDoc`, `AspDetailedError`, `HttpExpires`, `CacheControlMaxAge`, `CacheControlCustom`, `NoCustomError`, `AccessSSLFlags`, `AuthenticationProviders`, `DirBrowseFlags`"
2727
L"FROM `Wix4IIsWebDirProperties`";
2828

2929
LPCWSTR vcsSslCertificateQuery = L"SELECT `Wix4Certificate`.`StoreName`, `Wix4CertificateHash`.`Hash`, `Wix4IIsWebSiteCertificates`.`Web_` FROM `Wix4Certificate`, `Wix4CertificateHash`, `Wix4IIsWebSiteCertificates` WHERE `Wix4Certificate`.`Certificate`=`Wix4CertificateHash`.`Certificate_` AND `Wix4CertificateHash`.`Certificate_`=`Wix4IIsWebSiteCertificates`.`Certificate_`";

src/ext/Iis/ca/scawebprop.cpp

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
#include "precomp.h"
44

55
// sql queries
6-
enum eWebDirPropertiesQuery { wpqProperties = 1, wpqAccess, wpqAuthorization, wpqUser, wpqControlledPassword, wpqLogVisits, wpqIndex, wpqDefaultDoc, wpqAspDetailedError, wpqHttpExp, wpqCCMaxAge, wpqCCCustom, wpqNoCustomError, wpqAccessSSLFlags, wpqAuthenticationProviders };
6+
enum eWebDirPropertiesQuery { wpqProperties = 1, wpqAccess, wpqAuthorization, wpqUser, wpqControlledPassword, wpqLogVisits, wpqIndex, wpqDefaultDoc, wpqAspDetailedError, wpqHttpExp, wpqCCMaxAge, wpqCCCustom, wpqNoCustomError, wpqAccessSSLFlags, wpqAuthenticationProviders, wpqDirBrowseFlags };
77

88
HRESULT ScaGetWebDirProperties(
99
__in LPCWSTR wzProperties,
@@ -154,6 +154,9 @@ HRESULT ScaGetWebDirProperties(
154154
{
155155
pswp->wzAuthenticationProviders[0] = L'\0';
156156
}
157+
158+
hr = WcaGetRecordInteger(hRec, wpqDirBrowseFlags, &pswp->iDirBrowseFlags);
159+
ExitOnFailure(hr, "failed to get IIsWebDirProperties.DirBrowseFlags");
157160
}
158161
else if (E_NOMOREITEMS == hr)
159162
{
@@ -296,6 +299,23 @@ HRESULT ScaWriteWebDirProperties(
296299
ExitOnFailure(hr, "Failed to write AuthenticationProviders for Web");
297300
}
298301

302+
if (MSI_NULL_INTEGER != pswp->iDirBrowseFlags)
303+
{
304+
DWORD dwDirBrowseFlags = 0;
305+
dwDirBrowseFlags |= (pswp->iDirBrowseFlags & wedbDirBrowseShowDate) ? MD_DIRBROW_SHOW_DATE : 0;
306+
dwDirBrowseFlags |= (pswp->iDirBrowseFlags & wedbDirBrowseShowExtension) ? MD_DIRBROW_SHOW_EXTENSION : 0;
307+
dwDirBrowseFlags |= (pswp->iDirBrowseFlags & wedbDirBrowseShowLongDate) ? MD_DIRBROW_LONG_DATE : 0;
308+
dwDirBrowseFlags |= (pswp->iDirBrowseFlags & wedbDirBrowseShowSize) ? MD_DIRBROW_SHOW_SIZE : 0;
309+
dwDirBrowseFlags |= (pswp->iDirBrowseFlags & wedbDirBrowseShowTime) ? MD_DIRBROW_SHOW_TIME : 0;
310+
dwDirBrowseFlags |= (pswp->iDirBrowseFlags & wedbEnableDefaultDoc) ? MD_DIRBROW_LOADDEFAULT : 0;
311+
dwDirBrowseFlags |= (pswp->iDirBrowseFlags & wedbEnableDirBrowsing) ? MD_DIRBROW_ENABLED : 0;
312+
313+
// we XOR the flags, we only update things if they should be non-default
314+
dwDirBrowseFlags ^= MD_DIRBROW_SHOW_DATE | MD_DIRBROW_SHOW_TIME | MD_DIRBROW_SHOW_SIZE | MD_DIRBROW_SHOW_EXTENSION | MD_DIRBROW_LONG_DATE | MD_DIRBROW_LOADDEFAULT;
315+
hr = ScaWriteMetabaseValue(piMetabase, wzRootOfWeb, NULL, MD_DIRECTORY_BROWSING, METADATA_INHERIT, IIS_MD_UT_FILE, DWORD_METADATA, (LPVOID)((DWORD_PTR)dwDirBrowseFlags));
316+
ExitOnFailure(hr, "Failed to write AccessSSLFlags for Web");
317+
}
318+
299319
LExit:
300320
return hr;
301321
}

src/ext/Iis/ca/scawebprop.h

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,18 @@
77
// global sql queries provided for optimization
88
extern LPCWSTR vcsWebDirPropertiesQuery;
99

10+
// enumerations
11+
enum eWebDirBrowseFlags
12+
{
13+
wedbDirBrowseShowDate = 1 << 0,
14+
wedbDirBrowseShowExtension = 1 << 1,
15+
wedbDirBrowseShowLongDate = 1 << 2,
16+
wedbDirBrowseShowSize = 1 << 3,
17+
wedbDirBrowseShowTime = 1 << 4,
18+
wedbEnableDefaultDoc = 1 << 5,
19+
wedbEnableDirBrowsing = 1 << 6,
20+
};
21+
1022

1123
// structs
1224
struct SCA_WEB_PROPERTIES
@@ -40,6 +52,8 @@ struct SCA_WEB_PROPERTIES
4052

4153
int iAccessSSLFlags;
4254

55+
int iDirBrowseFlags;
56+
4357
WCHAR wzAuthenticationProviders[MAX_DARWIN_COLUMN + 1];
4458
};
4559

src/ext/Iis/ca/scawebprop7.cpp

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,27 @@ HRESULT ScaWriteWebDirProperties7(
146146
hr = ScaWriteConfigString(wz);
147147
ExitOnFailure(hr, "Failed to write AuthenticationProviders for Web");
148148
}
149+
150+
if (MSI_NULL_INTEGER != pswp->iDirBrowseFlags)
151+
{
152+
DWORD dwDirBrowseFlags = 0;
153+
dwDirBrowseFlags |= (pswp->iDirBrowseFlags & wedbDirBrowseShowDate) ? MD_DIRBROW_SHOW_DATE : 0;
154+
dwDirBrowseFlags |= (pswp->iDirBrowseFlags & wedbDirBrowseShowExtension) ? MD_DIRBROW_SHOW_EXTENSION : 0;
155+
dwDirBrowseFlags |= (pswp->iDirBrowseFlags & wedbDirBrowseShowLongDate) ? MD_DIRBROW_LONG_DATE : 0;
156+
dwDirBrowseFlags |= (pswp->iDirBrowseFlags & wedbDirBrowseShowSize) ? MD_DIRBROW_SHOW_SIZE : 0;
157+
dwDirBrowseFlags |= (pswp->iDirBrowseFlags & wedbDirBrowseShowTime) ? MD_DIRBROW_SHOW_TIME : 0;
158+
dwDirBrowseFlags |= (pswp->iDirBrowseFlags & wedbEnableDefaultDoc) ? MD_DIRBROW_LOADDEFAULT : 0;
159+
dwDirBrowseFlags |= (pswp->iDirBrowseFlags & wedbEnableDirBrowsing) ? MD_DIRBROW_ENABLED : 0;
160+
161+
// we XOR the flags, we only update things if they should be non-default
162+
dwDirBrowseFlags ^= MD_DIRBROW_SHOW_DATE | MD_DIRBROW_SHOW_TIME | MD_DIRBROW_SHOW_SIZE | MD_DIRBROW_SHOW_EXTENSION | MD_DIRBROW_LONG_DATE | MD_DIRBROW_LOADDEFAULT;
163+
164+
hr = ScaWriteConfigID(IIS_DIRPROP_BROWSEFLAGS);
165+
ExitOnFailure(hr, "Failed to write DirProp BrowseFlags id");
166+
hr = ScaWriteConfigInteger(dwDirBrowseFlags);
167+
ExitOnFailure(hr, "Failed to write DirBrowseFlags for Web");
168+
}
169+
149170
//End of Dir Properties
150171
hr = ScaWriteConfigID(IIS_DIRPROP_END);
151172
ExitOnFailure(hr, "Failed to write DirProp end id");

src/ext/Iis/test/WixToolsetTest.Iis/IisExtensionFixture.cs

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,83 @@ public void CanBuildUsingIIs()
2525
}, results);
2626
}
2727

28+
[Fact]
29+
public void CanBuildWebDirProperties()
30+
{
31+
var folder = TestData.Get(@"TestData\WebDirProperties");
32+
var build = new Builder(folder, typeof(IisExtensionFactory), new[] { folder });
33+
34+
var results = build.BuildAndQuery(Build, validate: true, "Wix4IIsWebSite", "Wix4IIsWebDir", "Wix4IIsWebDirProperties");
35+
WixAssert.CompareLineByLine(new[]
36+
{
37+
"Wix4IIsWebDir:TestDirAccessSSL\tfilF5_pLhBuF5b4N9XEo52g_hUM5Lo\tTest\tTestAccessSSL\tTestAccessSSL\t",
38+
"Wix4IIsWebDir:TestDirAccessSSL128\tfilF5_pLhBuF5b4N9XEo52g_hUM5Lo\tTest\tTestAccessSSL128\tTestAccessSSL128\t",
39+
"Wix4IIsWebDir:TestDirAccessSSLMapCert\tfilF5_pLhBuF5b4N9XEo52g_hUM5Lo\tTest\tTestAccessSSLMapCert\tTestAccessSSLMapCert\t",
40+
"Wix4IIsWebDir:TestDirAccessSSLNegotiateCert\tfilF5_pLhBuF5b4N9XEo52g_hUM5Lo\tTest\tTestAccessSSLNegotiateCert\tTestAccessSSLNegotiateCert\t",
41+
"Wix4IIsWebDir:TestDirAccessSSLRequireCert\tfilF5_pLhBuF5b4N9XEo52g_hUM5Lo\tTest\tTestAccessSSLRequireCert\tTestAccessSSLRequireCert\t",
42+
"Wix4IIsWebDir:TestDirAnonymousAccess\tfilF5_pLhBuF5b4N9XEo52g_hUM5Lo\tTest\tTestAnonymousAccess\tTestAnonymousAccess\t",
43+
"Wix4IIsWebDir:TestDirAspDetailedError\tfilF5_pLhBuF5b4N9XEo52g_hUM5Lo\tTest\tTestAspDetailedError\tTestAspDetailedError\t",
44+
"Wix4IIsWebDir:TestDirAuthenticationProviders\tfilF5_pLhBuF5b4N9XEo52g_hUM5Lo\tTest\tTestAuthenticationProviders\tTestAuthenticationProviders\t",
45+
"Wix4IIsWebDir:TestDirBasicAuthentication\tfilF5_pLhBuF5b4N9XEo52g_hUM5Lo\tTest\tTestBasicAuthentication\tTestBasicAuthentication\t",
46+
"Wix4IIsWebDir:TestDirCacheControlCustom\tfilF5_pLhBuF5b4N9XEo52g_hUM5Lo\tTest\tTestCacheControlCustom\tTestCacheControlCustom\t",
47+
"Wix4IIsWebDir:TestDirCacheControlMaxAge\tfilF5_pLhBuF5b4N9XEo52g_hUM5Lo\tTest\tTestCacheControlMaxAge\tTestCacheControlMaxAge\t",
48+
//"Wix4IIsWebDir:TestDirCacheControlMaxAgeNull\tfilF5_pLhBuF5b4N9XEo52g_hUM5Lo\tTest\tTestCacheControlMaxAgeNull\tTestCacheControlMaxAgeNull\t",
49+
"Wix4IIsWebDir:TestDirClearCustomError\tfilF5_pLhBuF5b4N9XEo52g_hUM5Lo\tTest\tTestClearCustomError\tTestClearCustomError\t",
50+
"Wix4IIsWebDir:TestDirDefaultDocuments\tfilF5_pLhBuF5b4N9XEo52g_hUM5Lo\tTest\tTestDefaultDocuments\tTestDefaultDocuments\t",
51+
"Wix4IIsWebDir:TestDirDigestAuthentication\tfilF5_pLhBuF5b4N9XEo52g_hUM5Lo\tTest\tTestDigestAuthentication\tTestDigestAuthentication\t",
52+
"Wix4IIsWebDir:TestDirDirBrowseShowDate\tfilF5_pLhBuF5b4N9XEo52g_hUM5Lo\tTest\tTestDirBrowseShowDate\tTestDirBrowseShowDate\t",
53+
"Wix4IIsWebDir:TestDirDirBrowseShowExtension\tfilF5_pLhBuF5b4N9XEo52g_hUM5Lo\tTest\tTestDirBrowseShowExtension\tTestDirBrowseShowExtension\t",
54+
"Wix4IIsWebDir:TestDirDirBrowseShowLongDate\tfilF5_pLhBuF5b4N9XEo52g_hUM5Lo\tTest\tTestDirBrowseShowLongDate\tTestDirBrowseShowLongDate\t",
55+
"Wix4IIsWebDir:TestDirDirBrowseShowSize\tfilF5_pLhBuF5b4N9XEo52g_hUM5Lo\tTest\tTestDirBrowseShowSize\tTestDirBrowseShowSize\t",
56+
"Wix4IIsWebDir:TestDirDirBrowseShowTime\tfilF5_pLhBuF5b4N9XEo52g_hUM5Lo\tTest\tTestDirBrowseShowTime\tTestDirBrowseShowTime\t",
57+
"Wix4IIsWebDir:TestDirEnableDefaultDoc\tfilF5_pLhBuF5b4N9XEo52g_hUM5Lo\tTest\tTestEnableDefaultDoc\tTestEnableDefaultDoc\t",
58+
"Wix4IIsWebDir:TestDirEnableDirBrowsing\tfilF5_pLhBuF5b4N9XEo52g_hUM5Lo\tTest\tTestEnableDirBrowsing\tTestEnableDirBrowsing\t",
59+
"Wix4IIsWebDir:TestDirExecute\tfilF5_pLhBuF5b4N9XEo52g_hUM5Lo\tTest\tTestExecute\tTestExecute\t",
60+
"Wix4IIsWebDir:TestDirHttpExpires\tfilF5_pLhBuF5b4N9XEo52g_hUM5Lo\tTest\tTestHttpExpires\tTestHttpExpires\t",
61+
"Wix4IIsWebDir:TestDirIIsControlledPassword\tfilF5_pLhBuF5b4N9XEo52g_hUM5Lo\tTest\tTestIIsControlledPassword\tTestIIsControlledPassword\t",
62+
"Wix4IIsWebDir:TestDirIndex\tfilF5_pLhBuF5b4N9XEo52g_hUM5Lo\tTest\tTestIndex\tTestIndex\t",
63+
"Wix4IIsWebDir:TestDirLogVisits\tfilF5_pLhBuF5b4N9XEo52g_hUM5Lo\tTest\tTestLogVisits\tTestLogVisits\t",
64+
"Wix4IIsWebDir:TestDirPassportAuthentication\tfilF5_pLhBuF5b4N9XEo52g_hUM5Lo\tTest\tTestPassportAuthentication\tTestPassportAuthentication\t",
65+
"Wix4IIsWebDir:TestDirRead\tfilF5_pLhBuF5b4N9XEo52g_hUM5Lo\tTest\tTestRead\tTestRead\t",
66+
"Wix4IIsWebDir:TestDirScript\tfilF5_pLhBuF5b4N9XEo52g_hUM5Lo\tTest\tTestScript\tTestScript\t",
67+
"Wix4IIsWebDir:TestDirWindowsAuthentication\tfilF5_pLhBuF5b4N9XEo52g_hUM5Lo\tTest\tTestWindowsAuthentication\tTestWindowsAuthentication\t",
68+
"Wix4IIsWebDir:TestDirWrite\tfilF5_pLhBuF5b4N9XEo52g_hUM5Lo\tTest\tTestWrite\tTestWrite\t",
69+
"Wix4IIsWebDirProperties:TestAccessSSL\t\t\t\t0\t\t\t\t\t\t\t\t\t8\t\t",
70+
"Wix4IIsWebDirProperties:TestAccessSSL128\t\t\t\t0\t\t\t\t\t\t\t\t\t256\t\t",
71+
"Wix4IIsWebDirProperties:TestAccessSSLMapCert\t\t\t\t0\t\t\t\t\t\t\t\t\t128\t\t",
72+
"Wix4IIsWebDirProperties:TestAccessSSLNegotiateCert\t\t\t\t0\t\t\t\t\t\t\t\t\t32\t\t",
73+
"Wix4IIsWebDirProperties:TestAccessSSLRequireCert\t\t\t\t0\t\t\t\t\t\t\t\t\t64\t\t",
74+
"Wix4IIsWebDirProperties:TestAnonymousAccess\t\t1\t\t0\t\t\t\t\t\t\t\t\t\t\t",
75+
"Wix4IIsWebDirProperties:TestAspDetailedError\t\t\t\t0\t\t\t\t1\t\t\t\t\t\t\t",
76+
"Wix4IIsWebDirProperties:TestAuthenticationProviders\t\t\t\t0\t\t\t\t\t\t\t\t\t\tNTLM\t",
77+
"Wix4IIsWebDirProperties:TestBasicAuthentication\t\t2\t\t0\t\t\t\t\t\t\t\t\t\t\t",
78+
"Wix4IIsWebDirProperties:TestCacheControlCustom\t\t\t\t0\t\t\t\t\t\t\tCacheControl\t\t\t\t",
79+
"Wix4IIsWebDirProperties:TestCacheControlMaxAge\t\t\t\t0\t\t\t\t\t\t-1\t\t\t\t\t",
80+
//"Wix4IIsWebDirProperties:TestCacheControlMaxAgeNull\t\t\t\t0\t\t\t\t\t\t4294967295\t\t\t\t\t",
81+
"Wix4IIsWebDirProperties:TestClearCustomError\t\t\t\t0\t\t\t\t\t\t\t\t1\t\t\t",
82+
"Wix4IIsWebDirProperties:TestDefaultDocuments\t\t\t\t0\t\t\tDefaultDocument.html,index.html,index.htm\t\t\t\t\t\t\t\t",
83+
"Wix4IIsWebDirProperties:TestDigestAuthentication\t\t16\t\t0\t\t\t\t\t\t\t\t\t\t\t",
84+
"Wix4IIsWebDirProperties:TestDirBrowseShowDate\t\t\t\t0\t\t\t\t\t\t\t\t\t\t\t1",
85+
"Wix4IIsWebDirProperties:TestDirBrowseShowExtension\t\t\t\t0\t\t\t\t\t\t\t\t\t\t\t2",
86+
"Wix4IIsWebDirProperties:TestDirBrowseShowLongDate\t\t\t\t0\t\t\t\t\t\t\t\t\t\t\t4",
87+
"Wix4IIsWebDirProperties:TestDirBrowseShowSize\t\t\t\t0\t\t\t\t\t\t\t\t\t\t\t8",
88+
"Wix4IIsWebDirProperties:TestDirBrowseShowTime\t\t\t\t0\t\t\t\t\t\t\t\t\t\t\t16",
89+
"Wix4IIsWebDirProperties:TestEnableDefaultDoc\t\t\t\t0\t\t\t\t\t\t\t\t\t\t\t32",
90+
"Wix4IIsWebDirProperties:TestEnableDirBrowsing\t\t\t\t0\t\t\t\t\t\t\t\t\t\t\t64",
91+
"Wix4IIsWebDirProperties:TestExecute\t4\t\t\t0\t\t\t\t\t\t\t\t\t\t\t",
92+
"Wix4IIsWebDirProperties:TestHttpExpires\t\t\t\t0\t\t\t\t\tyes\t\t\t\t\t\t",
93+
"Wix4IIsWebDirProperties:TestIIsControlledPassword\t\t\t\t1\t\t\t\t\t\t\t\t\t\t\t",
94+
"Wix4IIsWebDirProperties:TestIndex\t\t\t\t0\t\t1\t\t\t\t\t\t\t\t\t",
95+
"Wix4IIsWebDirProperties:TestLogVisits\t\t\t\t0\t1\t\t\t\t\t\t\t\t\t\t",
96+
"Wix4IIsWebDirProperties:TestPassportAuthentication\t\t64\t\t0\t\t\t\t\t\t\t\t\t\t\t",
97+
"Wix4IIsWebDirProperties:TestRead\t1\t\t\t0\t\t\t\t\t\t\t\t\t\t\t",
98+
"Wix4IIsWebDirProperties:TestScript\t512\t\t\t0\t\t\t\t\t\t\t\t\t\t\t",
99+
"Wix4IIsWebDirProperties:TestWindowsAuthentication\t\t4\t\t0\t\t\t\t\t\t\t\t\t\t\t",
100+
"Wix4IIsWebDirProperties:TestWrite\t2\t\t\t0\t\t\t\t\t\t\t\t\t\t\t",
101+
"Wix4IIsWebSite:Test\tfilF5_pLhBuF5b4N9XEo52g_hUM5Lo\tTest web server\t\tTestWebSiteProductDirectory\t2\t2\tTestAddress\t\t\t\t\t",
102+
}, results);
103+
}
104+
28105
private static void Build(string[] args)
29106
{
30107
var newArgs = args.ToList();
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
<!--
2+
This file contains the declaration of all the localizable strings.
3+
-->
4+
<WixLocalization xmlns="http://wixtoolset.org/schemas/v4/wxl" Culture="en-US">
5+
6+
<String Id="DowngradeError" Value="A newer version of [ProductName] is already installed." />
7+
<String Id="FeatureTitle" Value="MsiPackage" />
8+
9+
</WixLocalization>
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs">
2+
<Package Name="MsiPackage" Language="1033" Version="1.0.0.0" Manufacturer="Example Corporation" UpgradeCode="047730a5-30fe-4a62-a520-da9381b8226a" InstallerVersion="200">
3+
<MajorUpgrade DowngradeErrorMessage="!(loc.DowngradeError)" />
4+
5+
<Feature Id="ProductFeature" Title="!(loc.FeatureTitle)">
6+
<ComponentGroupRef Id="ProductComponents" />
7+
</Feature>
8+
</Package>
9+
10+
<Fragment>
11+
<StandardDirectory Id="ProgramFiles6432Folder">
12+
<Directory Id="INSTALLFOLDER" Name="MsiPackage">
13+
<Directory Id="TestWebSiteProductDirectory" />
14+
</Directory>
15+
</StandardDirectory>
16+
</Fragment>
17+
</Wix>

0 commit comments

Comments
 (0)