main
cs 428 lines 22.2 KB
Raw
1 // Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3 namespace WixToolsetTest.UI
4 {
5 using System.IO;
6 using System.Linq;
7 using WixInternal.Core.TestPackage;
8 using WixInternal.TestSupport;
9 using WixToolset.Data.WindowsInstaller;
10 using WixToolset.UI;
11 using Xunit;
12
13 public class UIExtensionFixture
14 {
15 [Fact]
16 public void CanBuildUsingWixUIAdvanced()
17 {
18 var folder = TestData.Get(@"TestData", "WixUI_Advanced");
19 var bindFolder = TestData.Get(@"TestData", "data");
20 var build = new Builder(folder, typeof(UIExtensionFactory), new[] { bindFolder });
21
22 var results = build.BuildAndQuery(Build, "Binary", "Dialog", "CustomAction", "ControlEvent", "InstallUISequence");
23 Assert.Single(results, result => result.StartsWith("Dialog:AdvancedWelcomeEulaDlg\t"));
24 WixAssert.CompareLineByLine(new[]
25 {
26 "Binary:WixUI_Bmp_Banner\t[Binary data]",
27 "Binary:WixUI_Bmp_Dialog\t[Binary data]",
28 "Binary:WixUI_Bmp_New\t[Binary data]",
29 "Binary:WixUI_Bmp_Up\t[Binary data]",
30 "Binary:WixUI_Ico_Exclam\t[Binary data]",
31 "Binary:WixUI_Ico_Info\t[Binary data]",
32 }, results.Where(r => r.StartsWith("Binary:")).ToArray());
33 WixAssert.CompareLineByLine(new[]
34 {
35 "CustomAction:WixSetDefaultPerMachineFolder\t51\tWixPerMachineFolder\t[ProgramFilesFolder][ApplicationFolderName]\t",
36 "CustomAction:WixSetDefaultPerUserFolder\t51\tWixPerUserFolder\t[LocalAppDataFolder]Apps\\[ApplicationFolderName]\t",
37 "CustomAction:WixSetPerMachineFolder\t51\tAPPLICATIONFOLDER\t[WixPerMachineFolder]\t",
38 "CustomAction:WixSetPerUserFolder\t51\tAPPLICATIONFOLDER\t[WixPerUserFolder]\t",
39 }, results.Where(r => r.StartsWith("CustomAction:")).ToArray());
40 Assert.Empty(results.Where(result => result.StartsWith("ControlEvent:") && result.Contains("DoAction")).ToArray());
41 WixAssert.CompareLineByLine(new[]
42 {
43 "InstallUISequence:AdvancedWelcomeEulaDlg\tNOT Installed\t1297",
44 "InstallUISequence:WelcomeDlg\tInstalled AND PATCH\t1296",
45 }, results.Where(r => r.StartsWith("InstallUISequence:AdvancedWelcome") || r.StartsWith("InstallUISequence:Welcome")).ToArray());
46 }
47
48 [Fact]
49 public void CanBuildUsingWixUIAdvancedX64()
50 {
51 var folder = TestData.Get(@"TestData", "WixUI_Advanced");
52 var bindFolder = TestData.Get(@"TestData", "data");
53 var build = new Builder(folder, typeof(UIExtensionFactory), new[] { bindFolder });
54
55 var results = build.BuildAndQuery(BuildX64, "Binary", "Dialog", "CustomAction", "ControlEvent", "InstallUISequence");
56 Assert.Single(results, result => result.StartsWith("Dialog:AdvancedWelcomeEulaDlg\t"));
57 WixAssert.CompareLineByLine(new[]
58 {
59 "Binary:WixUI_Bmp_Banner\t[Binary data]",
60 "Binary:WixUI_Bmp_Dialog\t[Binary data]",
61 "Binary:WixUI_Bmp_New\t[Binary data]",
62 "Binary:WixUI_Bmp_Up\t[Binary data]",
63 "Binary:WixUI_Ico_Exclam\t[Binary data]",
64 "Binary:WixUI_Ico_Info\t[Binary data]",
65 }, results.Where(r => r.StartsWith("Binary:")).ToArray());
66 WixAssert.CompareLineByLine(new[]
67 {
68 "CustomAction:WixSetDefaultPerMachineFolder\t51\tWixPerMachineFolder\t[ProgramFilesFolder][ApplicationFolderName]\t",
69 "CustomAction:WixSetDefaultPerUserFolder\t51\tWixPerUserFolder\t[LocalAppDataFolder]Apps\\[ApplicationFolderName]\t",
70 "CustomAction:WixSetPerMachineFolder\t51\tAPPLICATIONFOLDER\t[WixPerMachineFolder]\t",
71 "CustomAction:WixSetPerUserFolder\t51\tAPPLICATIONFOLDER\t[WixPerUserFolder]\t",
72 }, results.Where(r => r.StartsWith("CustomAction:")).ToArray());
73 Assert.Empty(results.Where(result => result.StartsWith("ControlEvent:") && result.Contains("DoAction")).ToArray());
74 }
75
76 [Fact]
77 public void CanBuildUsingWixUIAdvancedARM64()
78 {
79 var folder = TestData.Get(@"TestData", "WixUI_Advanced");
80 var bindFolder = TestData.Get(@"TestData", "data");
81 var build = new Builder(folder, typeof(UIExtensionFactory), new[] { bindFolder });
82
83 var results = build.BuildAndQuery(BuildARM64, "Binary", "Dialog", "CustomAction", "ControlEvent", "InstallUISequence");
84 Assert.Single(results, result => result.StartsWith("Dialog:AdvancedWelcomeEulaDlg\t"));
85 WixAssert.CompareLineByLine(new[]
86 {
87 "Binary:WixUI_Bmp_Banner\t[Binary data]",
88 "Binary:WixUI_Bmp_Dialog\t[Binary data]",
89 "Binary:WixUI_Bmp_New\t[Binary data]",
90 "Binary:WixUI_Bmp_Up\t[Binary data]",
91 "Binary:WixUI_Ico_Exclam\t[Binary data]",
92 "Binary:WixUI_Ico_Info\t[Binary data]",
93 }, results.Where(r => r.StartsWith("Binary:")).ToArray());
94 WixAssert.CompareLineByLine(new[]
95 {
96 "CustomAction:WixSetDefaultPerMachineFolder\t51\tWixPerMachineFolder\t[ProgramFilesFolder][ApplicationFolderName]\t",
97 "CustomAction:WixSetDefaultPerUserFolder\t51\tWixPerUserFolder\t[LocalAppDataFolder]Apps\\[ApplicationFolderName]\t",
98 "CustomAction:WixSetPerMachineFolder\t51\tAPPLICATIONFOLDER\t[WixPerMachineFolder]\t",
99 "CustomAction:WixSetPerUserFolder\t51\tAPPLICATIONFOLDER\t[WixPerUserFolder]\t",
100 }, results.Where(r => r.StartsWith("CustomAction:")).ToArray());
101 Assert.Empty(results.Where(result => result.StartsWith("ControlEvent:") && result.Contains("DoAction")).ToArray());
102 }
103
104 [Fact]
105 public void CanBuildUsingWixUIFeatureTree()
106 {
107 var folder = TestData.Get(@"TestData", "WixUI_FeatureTree");
108 var bindFolder = TestData.Get(@"TestData", "data");
109 var build = new Builder(folder, typeof(UIExtensionFactory), new[] { bindFolder });
110
111 var results = build.BuildAndQuery(BuildX64, "Binary", "Dialog", "CustomAction", "ControlEvent", "InstallUISequence");
112 Assert.Single(results, result => result.StartsWith("Dialog:WelcomeDlg\t"));
113 Assert.Single(results, result => result.StartsWith("Dialog:CustomizeDlg\t"));
114 Assert.Empty(results.Where(result => result.StartsWith("Dialog:SetupTypeDlg\t")));
115 WixAssert.CompareLineByLine(new[]
116 {
117 "Binary:WixUI_Bmp_Banner\t[Binary data]",
118 "Binary:WixUI_Bmp_Dialog\t[Binary data]",
119 "Binary:WixUI_Bmp_New\t[Binary data]",
120 "Binary:WixUI_Bmp_Up\t[Binary data]",
121 "Binary:WixUI_Ico_Exclam\t[Binary data]",
122 "Binary:WixUI_Ico_Info\t[Binary data]",
123 }, results.Where(r => r.StartsWith("Binary:")).ToArray());
124 WixAssert.CompareLineByLine(new[]
125 {
126 "CustomAction:SetWIXUI_EXITDIALOGOPTIONALTEXT\t51\tWIXUI_EXITDIALOGOPTIONALTEXT\tThank you for installing [ProductName].\t",
127 }, results.Where(r => r.StartsWith("CustomAction:")).ToArray());
128 Assert.Empty(results.Where(result => result.StartsWith("ControlEvent:") && result.Contains("DoAction")));
129 WixAssert.CompareLineByLine(new[]
130 {
131 "InstallUISequence:WelcomeDlg\tNOT Installed OR PATCH\t1297",
132 }, results.Where(r => r.StartsWith("InstallUISequence:AdvancedWelcome") || r.StartsWith("InstallUISequence:Welcome")).ToArray());
133 }
134
135 [Fact]
136 public void CanBuildWithWixUIInstallDirWithCustomizedEula()
137 {
138 var folder = TestData.Get(@"TestData", "WixUI_InstallDir");
139 var bindFolder = TestData.Get(@"TestData", "data");
140 var build = new Builder(folder, typeof(UIExtensionFactory), new[] { bindFolder });
141
142 var results = build.BuildAndQuery(BuildEula, "Binary", "Dialog", "CustomAction", "Property", "ControlEvent", "InstallUISequence");
143 Assert.Single(results, result => result.StartsWith("Dialog:InstallDirDlg\t"));
144 Assert.Single(results, result => result.StartsWith("Dialog:WelcomeDlg\t"));
145 WixAssert.CompareLineByLine(new[]
146 {
147 "Binary:WixUI_Bmp_Banner\t[Binary data]",
148 "Binary:WixUI_Bmp_Dialog\t[Binary data]",
149 "Binary:WixUI_Bmp_New\t[Binary data]",
150 "Binary:WixUI_Bmp_Up\t[Binary data]",
151 "Binary:WixUI_Ico_Exclam\t[Binary data]",
152 "Binary:WixUI_Ico_Info\t[Binary data]",
153 "Binary:WixUiCa_X86\t[Binary data]",
154 }, results.Where(r => r.StartsWith("Binary:")).ToArray());
155 WixAssert.CompareLineByLine(new[]
156 {
157 "CustomAction:WixUIValidatePath_X86\t65\tWixUiCa_X86\tValidatePath\t",
158 }, results.Where(r => r.StartsWith("CustomAction:")).ToArray());
159 WixAssert.CompareLineByLine(new[]
160 {
161 "Property:WIXUI_INSTALLDIR\tINSTALLFOLDER",
162 }, results.Where(r => r.StartsWith("Property:WIXUI")).ToArray());
163 WixAssert.CompareLineByLine(new[]
164 {
165 "ControlEvent:BrowseDlg\tOK\tDoAction\tWixUIValidatePath_X86\t1\t1",
166 "ControlEvent:InstallDirDlg\tNext\tDoAction\tWixUIValidatePath_X86\t1\t1",
167 }, results.Where(result => result.StartsWith("ControlEvent:") && result.Contains("DoAction")).OrderBy(s => s).ToArray());
168 WixAssert.CompareLineByLine(new[]
169 {
170 "InstallUISequence:WelcomeDlg\tNOT Installed OR PATCH\t1297",
171 }, results.Where(r => r.StartsWith("InstallUISequence:AdvancedWelcome") || r.StartsWith("InstallUISequence:Welcome")).ToArray());
172 }
173
174 [Fact]
175 public void CanBuildUsingWixUIMinimal()
176 {
177 var folder = TestData.Get(@"TestData", "WixUI_Minimal");
178 var bindFolder = TestData.Get(@"TestData", "data");
179 var build = new Builder(folder, typeof(UIExtensionFactory), new[] { bindFolder });
180
181 var results = build.BuildAndQuery(Build, "Binary", "Dialog", "CustomAction", "ControlEvent", "InstallUISequence");
182 Assert.Single(results, result => result.StartsWith("Dialog:WelcomeEulaDlg\t"));
183 WixAssert.CompareLineByLine(new[]
184 {
185 "Binary:WixUI_Bmp_Banner\t[Binary data]",
186 "Binary:WixUI_Bmp_Dialog\t[Binary data]",
187 "Binary:WixUI_Bmp_New\t[Binary data]",
188 "Binary:WixUI_Bmp_Up\t[Binary data]",
189 "Binary:WixUI_Ico_Exclam\t[Binary data]",
190 "Binary:WixUI_Ico_Info\t[Binary data]",
191 }, results.Where(r => r.StartsWith("Binary:")).ToArray());
192 Assert.Empty(results.Where(r => r.StartsWith("CustomAction:")));
193 Assert.Empty(results.Where(result => result.StartsWith("ControlEvent:") && result.Contains("DoAction")));
194 WixAssert.CompareLineByLine(new[]
195 {
196 "InstallUISequence:WelcomeDlg\tInstalled AND PATCH\t1296",
197 "InstallUISequence:WelcomeEulaDlg\tNOT Installed\t1297",
198 }, results.Where(r => r.StartsWith("InstallUISequence:AdvancedWelcome") || r.StartsWith("InstallUISequence:Welcome")).ToArray());
199 }
200
201 [Fact]
202 public void CanBuildUsingWixUIMinimalInKazakh()
203 {
204 var folder = TestData.Get(@"TestData", "WixUI_Minimal");
205 var bindFolder = TestData.Get(@"TestData", "data");
206 var build = new Builder(folder, typeof(UIExtensionFactory), new[] { bindFolder });
207
208 var results = build.BuildAndQuery(BuildInKazakh, "Dialog");
209 var welcomeDlg = results.Where(r => r.StartsWith("Dialog:WelcomeDlg\t")).Select(r => r.Split('\t')).Single();
210 Assert.Equal("[ProductName] бағдарламасын орнату", welcomeDlg[6]);
211 }
212
213 [Fact]
214 public void CanBuildUsingWixUIMinimalAndReadPdb()
215 {
216 var folder = TestData.Get(@"TestData", "WixUI_Minimal");
217 var bindFolder = TestData.Get(@"TestData", "data");
218
219 using (var fs = new DisposableFileSystem())
220 {
221 var intermediateFolder = fs.GetFolder();
222
223 Build(new[]
224 {
225 "build",
226 Path.Combine(folder, "Package.wxs"),
227 "-ext", Path.GetFullPath(typeof(UIExtensionFactory).Assembly.Location),
228 "-bindpath", bindFolder,
229 "-intermediateFolder", intermediateFolder,
230 "-o", Path.Combine(intermediateFolder, @"bin\test.msi")
231 });
232
233 var wid = WindowsInstallerData.Load(Path.Combine(intermediateFolder, @"bin\test.wixpdb"));
234 var dialogTable = wid.Tables["Dialog"];
235 var dialogRow = dialogTable.Rows.Single(r => r.GetPrimaryKey() == "WelcomeEulaDlg");
236 }
237 }
238
239 [Fact]
240 public void CanBuildUsingWixUIMondo()
241 {
242 var folder = TestData.Get(@"TestData", "WixUI_Mondo");
243 var bindFolder = TestData.Get(@"TestData", "data");
244 var build = new Builder(folder, typeof(UIExtensionFactory), new[] { bindFolder });
245
246 var results = build.BuildAndQuery(Build, "Binary", "Dialog", "CustomAction", "ControlEvent", "InstallUISequence");
247 Assert.Single(results, result => result.StartsWith("Dialog:WelcomeDlg\t"));
248 Assert.Single(results, result => result.StartsWith("Dialog:CustomizeDlg\t"));
249 Assert.Single(results, result => result.StartsWith("Dialog:SetupTypeDlg\t"));
250 WixAssert.CompareLineByLine(new[]
251 {
252 "Binary:WixUI_Bmp_Banner\t[Binary data]",
253 "Binary:WixUI_Bmp_Dialog\t[Binary data]",
254 "Binary:WixUI_Bmp_New\t[Binary data]",
255 "Binary:WixUI_Bmp_Up\t[Binary data]",
256 "Binary:WixUI_Ico_Exclam\t[Binary data]",
257 "Binary:WixUI_Ico_Info\t[Binary data]",
258 "Binary:WixUiCa_X86\t[Binary data]",
259 }, results.Where(r => r.StartsWith("Binary:")).ToArray());
260 WixAssert.CompareLineByLine(new[]
261 {
262 "CustomAction:WixUIValidatePath_X86\t65\tWixUiCa_X86\tValidatePath\t",
263 }, results.Where(r => r.StartsWith("CustomAction:")).ToArray());
264 WixAssert.CompareLineByLine(new[]
265 {
266 "ControlEvent:BrowseDlg\tOK\tDoAction\tWixUIValidatePath_X86\t1\t1",
267 }, results.Where(result => result.StartsWith("ControlEvent:") && result.Contains("DoAction")).ToArray());
268 WixAssert.CompareLineByLine(new[]
269 {
270 "InstallUISequence:WelcomeDlg\tNOT Installed OR PATCH\t1297",
271 }, results.Where(r => r.StartsWith("InstallUISequence:AdvancedWelcome") || r.StartsWith("InstallUISequence:Welcome")).ToArray());
272 }
273
274 [Fact]
275 public void CanBuildUsingWixUIMondoLocalized()
276 {
277 var folder = TestData.Get(@"TestData", "WixUI_Mondo");
278 var bindFolder = TestData.Get(@"TestData", "data");
279 var build = new Builder(folder, typeof(UIExtensionFactory), new[] { bindFolder });
280
281 var results = build.BuildAndQuery(BuildInGerman, "Control");
282 WixAssert.CompareLineByLine(new[]
283 {
284 "&Ja",
285 }, results.Where(s => s.StartsWith("Control:ErrorDlg\tY")).Select(s => s.Split('\t')[9]).ToArray());
286 }
287
288 [Fact]
289 public void CanBuildWithInstallDirAndRemovedDialog()
290 {
291 var folder = TestData.Get(@"TestData", "InstallDir_NoLicense");
292 var bindFolder = TestData.Get(@"TestData", "data");
293 var build = new Builder(folder, typeof(UIExtensionFactory), new[] { bindFolder });
294
295 var results = build.BuildAndQuery(Build, "Binary", "Dialog", "CustomAction", "Property", "ControlEvent", "InstallUISequence");
296 Assert.Single(results, result => result.StartsWith("Dialog:InstallDirDlg\t"));
297 WixAssert.CompareLineByLine(new[]
298 {
299 "Binary:WixUI_Bmp_Banner\t[Binary data]",
300 "Binary:WixUI_Bmp_Dialog\t[Binary data]",
301 "Binary:WixUI_Bmp_New\t[Binary data]",
302 "Binary:WixUI_Bmp_Up\t[Binary data]",
303 "Binary:WixUI_Ico_Exclam\t[Binary data]",
304 "Binary:WixUI_Ico_Info\t[Binary data]",
305 "Binary:WixUiCa_X86\t[Binary data]",
306 }, results.Where(r => r.StartsWith("Binary:")).ToArray());
307 WixAssert.CompareLineByLine(new[]
308 {
309 "CustomAction:WixUIValidatePath_X86\t65\tWixUiCa_X86\tValidatePath\t",
310 }, results.Where(r => r.StartsWith("CustomAction:")).ToArray());
311 WixAssert.CompareLineByLine(new[]
312 {
313 "Property:WIXUI_INSTALLDIR\tINSTALLFOLDER",
314 }, results.Where(r => r.StartsWith("Property:WIXUI")).ToArray());
315 WixAssert.CompareLineByLine(new[]
316 {
317 "ControlEvent:BrowseDlg\tOK\tDoAction\tWixUIValidatePath_X86\t1\t3",
318 "ControlEvent:InstallDirDlg\tNext\tDoAction\tWixUIValidatePath_X86\t1\t2",
319 }, results.Where(result => result.StartsWith("ControlEvent:") && result.Contains("DoAction")).OrderBy(s => s).ToArray());
320
321 Assert.Empty(results.Where(result => result.Contains("LicenseAgreementDlg")).ToArray());
322
323 WixAssert.CompareLineByLine(new[]
324 {
325 "InstallUISequence:WelcomeDlg\tNOT Installed OR PATCH\t1297",
326 }, results.Where(r => r.StartsWith("InstallUISequence:AdvancedWelcome") || r.StartsWith("InstallUISequence:Welcome")).ToArray());
327 }
328
329 [Fact]
330 public void CanBuildWithInstallDirAndAddedDialog()
331 {
332 var folder = TestData.Get(@"TestData", "InstallDir_SpecialDlg");
333 var bindFolder = TestData.Get(@"TestData", "data");
334 var build = new Builder(folder, typeof(UIExtensionFactory), new[] { bindFolder });
335
336 var results = build.BuildAndQuery(BuildX64, "Binary", "Control", "Dialog", "CustomAction", "Property", "ControlEvent", "InstallUISequence");
337 Assert.Single(results, result => result.StartsWith("Dialog:InstallDirDlg\t"));
338 WixAssert.CompareLineByLine(new[]
339 {
340 "Binary:WixUI_Bmp_Banner\t[Binary data]",
341 "Binary:WixUI_Bmp_Dialog\t[Binary data]",
342 "Binary:WixUI_Bmp_New\t[Binary data]",
343 "Binary:WixUI_Bmp_Up\t[Binary data]",
344 "Binary:WixUI_Ico_Exclam\t[Binary data]",
345 "Binary:WixUI_Ico_Info\t[Binary data]",
346 }, results.Where(r => r.StartsWith("Binary:")).ToArray());
347 Assert.Empty(results.Where(r => r.StartsWith("CustomAction:")).ToArray());
348 WixAssert.CompareLineByLine(new[]
349 {
350 "Property:WIXUI_INSTALLDIR\tINSTALLFOLDER",
351 }, results.Where(r => r.StartsWith("Property:WIXUI")).ToArray());
352 Assert.Empty(results.Where(result => result.StartsWith("ControlEvent:") && result.Contains("DoAction")).OrderBy(s => s).ToArray());
353 WixAssert.CompareLineByLine(new[]
354 {
355 "InstallUISequence:WelcomeDlg\tNOT Installed OR PATCH\t1297",
356 }, results.Where(r => r.StartsWith("InstallUISequence:AdvancedWelcome") || r.StartsWith("InstallUISequence:Welcome")).ToArray());
357
358 Assert.Equal(10, results.Where(result => result.StartsWith("Control:") && result.Contains("SpecialDlg")).Count());
359 Assert.Equal(5, results.Where(result => result.StartsWith("ControlEvent:") && result.Contains("SpecialDlg")).Count());
360 Assert.Single(results.Where(result => result.StartsWith("Dialog:") && result.Contains("SpecialDlg")));
361 }
362
363 [Fact]
364 public void CannotBuildWithV3LikeUIRef()
365 {
366 var folder = TestData.Get(@"TestData", "InvalidUIRef");
367
368 using (var fs = new DisposableFileSystem())
369 {
370 var intermediateFolder = fs.GetFolder();
371 var outputPath = Path.Combine(intermediateFolder, "bin", "test.msi");
372
373 var args = new[]
374 {
375 "build",
376 Path.Combine(folder, "Package.wxs"),
377 "-ext", typeof(UIExtensionFactory).Assembly.Location,
378 "-intermediateFolder", intermediateFolder,
379 "-o", outputPath,
380 };
381
382 var results = WixRunner.Execute(args);
383 var message = results.Messages.Single();
384 Assert.Equal("The identifier 'WixUI:WixUI_Mondo' is inaccessible due to its protection level.", message.ToString());
385 }
386 }
387
388 private static void Build(string[] args)
389 {
390 var result = WixRunner.Execute(args);
391 result.AssertSuccess();
392 }
393
394 private static void BuildX64(string[] args)
395 {
396 var result = WixRunner.Execute(args.Concat(new[] { "-arch", "x64" }).ToArray())
397 .AssertSuccess();
398 }
399
400 private static void BuildARM64(string[] args)
401 {
402 var result = WixRunner.Execute(args.Concat(new[] { "-arch", "arm64" }).ToArray())
403 .AssertSuccess();
404 }
405
406 private static void BuildEula(string[] args)
407 {
408 var result = WixRunner.Execute(args.Concat(new[] { "-bv", "WixUILicenseRtf=bpl.rtf" }).ToArray())
409 .AssertSuccess();
410 }
411
412 private static void BuildInGerman(string[] args)
413 {
414 var localizedArgs = args.Append("-culture").Append("de-DE").ToArray();
415
416 var result = WixRunner.Execute(localizedArgs)
417 .AssertSuccess();
418 }
419
420 private static void BuildInKazakh(string[] args)
421 {
422 var localizedArgs = args.Append("-culture").Append("kk-KZ").ToArray();
423
424 var result = WixRunner.Execute(localizedArgs)
425 .AssertSuccess();
426 }
427 }
428 }