aboutsummaryrefslogtreecommitdiff
path: root/src/WixToolset.Core/Compiler_2.cs
diff options
context:
space:
mode:
Diffstat (limited to 'src/WixToolset.Core/Compiler_2.cs')
-rw-r--r--src/WixToolset.Core/Compiler_2.cs467
1 files changed, 201 insertions, 266 deletions
diff --git a/src/WixToolset.Core/Compiler_2.cs b/src/WixToolset.Core/Compiler_2.cs
index fbad873e..a3bc09b6 100644
--- a/src/WixToolset.Core/Compiler_2.cs
+++ b/src/WixToolset.Core/Compiler_2.cs
@@ -23,15 +23,24 @@ namespace WixToolset.Core
23 /// Parses a product element. 23 /// Parses a product element.
24 /// </summary> 24 /// </summary>
25 /// <param name="node">Element to parse.</param> 25 /// <param name="node">Element to parse.</param>
26 private void ParseProductElement(XElement node) 26 private void ParsePackageElement(XElement node)
27 { 27 {
28 var sourceLineNumbers = Preprocessor.GetSourceLineNumbers(node); 28 var sourceLineNumbers = Preprocessor.GetSourceLineNumbers(node);
29 var sourceBits = 0;
29 var codepage = 65001; 30 var codepage = 65001;
30 var productCode = "*"; 31 var productCode = "*";
32 var isPerMachine = true;
33 string installScope = null;
31 string upgradeCode = null; 34 string upgradeCode = null;
32 string manufacturer = null; 35 string manufacturer = null;
33 string version = null; 36 string version = null;
34 string symbols = null; 37 string symbols = null;
38 var isCodepageSet = false;
39 var isPackageNameSet = false;
40 var isKeywordsSet = false;
41 var isPackageAuthorSet = false;
42
43 this.GetDefaultPlatformAndInstallerVersion(out var platform, out var msiVersion);
35 44
36 this.activeName = null; 45 this.activeName = null;
37 this.activeLanguage = null; 46 this.activeLanguage = null;
@@ -42,12 +51,18 @@ namespace WixToolset.Core
42 { 51 {
43 switch (attrib.Name.LocalName) 52 switch (attrib.Name.LocalName)
44 { 53 {
45 case "Id":
46 productCode = this.Core.GetAttributeGuidValue(sourceLineNumbers, attrib, true);
47 break;
48 case "Codepage": 54 case "Codepage":
49 codepage = this.Core.GetAttributeCodePageValue(sourceLineNumbers, attrib); 55 codepage = this.Core.GetAttributeCodePageValue(sourceLineNumbers, attrib);
50 break; 56 break;
57 case "Compressed":
58 if (YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib))
59 {
60 sourceBits |= 2;
61 }
62 break;
63 case "InstallerVersion":
64 msiVersion = this.Core.GetAttributeIntegerValue(sourceLineNumbers, attrib, 0, Int32.MaxValue);
65 break;
51 case "Language": 66 case "Language":
52 this.activeLanguage = this.Core.GetAttributeLocalizableIntegerValue(sourceLineNumbers, attrib, 0, Int16.MaxValue); 67 this.activeLanguage = this.Core.GetAttributeLocalizableIntegerValue(sourceLineNumbers, attrib, 0, Int16.MaxValue);
53 break; 68 break;
@@ -65,6 +80,31 @@ namespace WixToolset.Core
65 this.Core.Write(WarningMessages.PlaceholderValue(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, this.activeName)); 80 this.Core.Write(WarningMessages.PlaceholderValue(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, this.activeName));
66 } 81 }
67 break; 82 break;
83 case "ProductCode":
84 productCode = this.Core.GetAttributeGuidValue(sourceLineNumbers, attrib, true);
85 break;
86 case "Scope":
87 installScope = this.Core.GetAttributeValue(sourceLineNumbers, attrib);
88 switch (installScope)
89 {
90 case "perMachine":
91 // handled below after we create the section.
92 break;
93 case "perUser":
94 isPerMachine = false;
95 sourceBits |= 8;
96 break;
97 default:
98 this.Core.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, installScope, "perMachine", "perUser"));
99 break;
100 }
101 break;
102 case "ShortNames":
103 if (YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib))
104 {
105 sourceBits |= 1;
106 }
107 break;
68 case "UpgradeCode": 108 case "UpgradeCode":
69 upgradeCode = this.Core.GetAttributeGuidValue(sourceLineNumbers, attrib, false); 109 upgradeCode = this.Core.GetAttributeGuidValue(sourceLineNumbers, attrib, false);
70 break; 110 break;
@@ -140,6 +180,19 @@ namespace WixToolset.Core
140 this.AddProperty(sourceLineNumbers, new Identifier(AccessModifier.Public, "UpgradeCode"), upgradeCode, false, false, false, true); 180 this.AddProperty(sourceLineNumbers, new Identifier(AccessModifier.Public, "UpgradeCode"), upgradeCode, false, false, false, true);
141 } 181 }
142 182
183 if (isPerMachine)
184 {
185 this.AddProperty(sourceLineNumbers, new Identifier(AccessModifier.Public, "ALLUSERS"), "1", false, false, false, false);
186 }
187
188 this.ValidateAndAddCommonSummaryInformationSymbols(sourceLineNumbers, msiVersion, platform);
189
190 this.Core.AddSymbol(new SummaryInformationSymbol(sourceLineNumbers)
191 {
192 PropertyId = SummaryInformationType.WordCount,
193 Value = sourceBits.ToString(CultureInfo.InvariantCulture)
194 });
195
143 var contextValues = new Dictionary<string, string> 196 var contextValues = new Dictionary<string, string>
144 { 197 {
145 ["ProductLanguage"] = this.activeLanguage, 198 ["ProductLanguage"] = this.activeLanguage,
@@ -240,9 +293,6 @@ namespace WixToolset.Core
240 case "MediaTemplate": 293 case "MediaTemplate":
241 this.ParseMediaTemplateElement(child, null); 294 this.ParseMediaTemplateElement(child, null);
242 break; 295 break;
243 case "Package":
244 this.ParsePackageElement(child, manufacturer, null);
245 break;
246 case "PackageCertificates": 296 case "PackageCertificates":
247 case "PatchCertificates": 297 case "PatchCertificates":
248 this.ParseCertificatesElement(child); 298 this.ParseCertificatesElement(child);
@@ -263,6 +313,9 @@ namespace WixToolset.Core
263 string parentName = null; 313 string parentName = null;
264 this.ParseSFPCatalogElement(child, ref parentName); 314 this.ParseSFPCatalogElement(child, ref parentName);
265 break; 315 break;
316 case "SummaryInformation":
317 this.ParseSummaryInformationElement(child, ref isCodepageSet, ref isPackageNameSet, ref isKeywordsSet, ref isPackageAuthorSet);
318 break;
266 case "SymbolPath": 319 case "SymbolPath":
267 if (null != symbols) 320 if (null != symbols)
268 { 321 {
@@ -298,6 +351,42 @@ namespace WixToolset.Core
298 351
299 if (!this.Core.EncounteredError) 352 if (!this.Core.EncounteredError)
300 { 353 {
354 if (!isCodepageSet)
355 {
356 this.Core.AddSymbol(new SummaryInformationSymbol(sourceLineNumbers)
357 {
358 PropertyId = SummaryInformationType.Codepage,
359 Value = "1252"
360 });
361 }
362
363 if (!isPackageNameSet)
364 {
365 this.Core.AddSymbol(new SummaryInformationSymbol(sourceLineNumbers)
366 {
367 PropertyId = SummaryInformationType.Subject,
368 Value = this.activeName
369 });
370 }
371
372 if (!isPackageAuthorSet)
373 {
374 this.Core.AddSymbol(new SummaryInformationSymbol(sourceLineNumbers)
375 {
376 PropertyId = SummaryInformationType.Author,
377 Value = manufacturer
378 });
379 }
380
381 if (!isKeywordsSet)
382 {
383 this.Core.AddSymbol(new SummaryInformationSymbol(sourceLineNumbers)
384 {
385 PropertyId = SummaryInformationType.Keywords,
386 Value = "Installer"
387 });
388 }
389
301 if (null != symbols) 390 if (null != symbols)
302 { 391 {
303 this.Core.AddSymbol(new WixDeltaPatchSymbolPathsSymbol(sourceLineNumbers) 392 this.Core.AddSymbol(new WixDeltaPatchSymbolPathsSymbol(sourceLineNumbers)
@@ -315,6 +404,74 @@ namespace WixToolset.Core
315 } 404 }
316 } 405 }
317 406
407 private void GetDefaultPlatformAndInstallerVersion(out string platform, out int msiVersion)
408 {
409 // Let's default to a modern version of MSI. Users can override,
410 // of course, subject to platform-specific limitations.
411 msiVersion = 500;
412
413 switch (this.CurrentPlatform)
414 {
415 case Platform.X86:
416 platform = "Intel";
417 break;
418 case Platform.X64:
419 platform = "x64";
420 break;
421 case Platform.ARM64:
422 platform = "Arm64";
423 break;
424 default:
425 throw new ArgumentException("Unknown platform enumeration '{0}' encountered.", this.CurrentPlatform.ToString());
426 }
427 }
428
429 private void ValidateAndAddCommonSummaryInformationSymbols(SourceLineNumber sourceLineNumbers, int msiVersion, string platform)
430 {
431 if (String.Equals(platform, "X64", StringComparison.OrdinalIgnoreCase) && 200 > msiVersion)
432 {
433 msiVersion = 200;
434 this.Core.Write(WarningMessages.RequiresMsi200for64bitPackage(sourceLineNumbers));
435 }
436
437 if (String.Equals(platform, "Arm64", StringComparison.OrdinalIgnoreCase) && 500 > msiVersion)
438 {
439 msiVersion = 500;
440 this.Core.Write(WarningMessages.RequiresMsi500forArmPackage(sourceLineNumbers));
441 }
442
443 this.Core.AddSymbol(new SummaryInformationSymbol(sourceLineNumbers)
444 {
445 PropertyId = SummaryInformationType.Comments,
446 Value = String.Format(CultureInfo.InvariantCulture, "This installer database contains the logic and data required to install {0}.", this.activeName)
447 });
448
449 this.Core.AddSymbol(new SummaryInformationSymbol(sourceLineNumbers)
450 {
451 PropertyId = SummaryInformationType.Title,
452 Value = "Installation Database"
453 });
454
455 this.Core.AddSymbol(new SummaryInformationSymbol(sourceLineNumbers)
456 {
457 PropertyId = SummaryInformationType.PlatformAndLanguage,
458 Value = String.Format(CultureInfo.InvariantCulture, "{0};{1}", platform, this.activeLanguage)
459 });
460
461 this.Core.AddSymbol(new SummaryInformationSymbol(sourceLineNumbers)
462 {
463 PropertyId = SummaryInformationType.WindowsInstallerVersion,
464 Value = msiVersion.ToString(CultureInfo.InvariantCulture)
465 });
466
467 this.Core.AddSymbol(new SummaryInformationSymbol(sourceLineNumbers)
468 {
469 PropertyId = SummaryInformationType.Security,
470 Value = "2"
471 });
472
473 }
474
318 /// <summary> 475 /// <summary>
319 /// Parses an odbc driver or translator element. 476 /// Parses an odbc driver or translator element.
320 /// </summary> 477 /// </summary>
@@ -615,40 +772,13 @@ namespace WixToolset.Core
615 /// <param name="node">Element to parse.</param> 772 /// <param name="node">Element to parse.</param>
616 /// <param name="productAuthor">Default package author.</param> 773 /// <param name="productAuthor">Default package author.</param>
617 /// <param name="moduleId">The module guid - this is necessary until Module/@Guid is removed.</param> 774 /// <param name="moduleId">The module guid - this is necessary until Module/@Guid is removed.</param>
618 private void ParsePackageElement(XElement node, string productAuthor, string moduleId) 775 private void ParseSummaryInformationElement(XElement node, ref bool isCodepageSet, ref bool isPackageNameSet, ref bool isKeywordsSet, ref bool isPackageAuthorSet)
619 { 776 {
620 var sourceLineNumbers = Preprocessor.GetSourceLineNumbers(node); 777 var sourceLineNumbers = Preprocessor.GetSourceLineNumbers(node);
621 var codepage = "1252"; 778 string codepage = null;
622 var comments = String.Format(CultureInfo.InvariantCulture, "This installer database contains the logic and data required to install {0}.", this.activeName); 779 string packageName = null;
623 var keywords = "Installer"; 780 string keywords = null;
624 var msiVersion = 100; // lowest released version, really should be specified 781 string packageAuthor = null;
625 var packageAuthor = productAuthor;
626 string packageCode = null;
627 var packageLanguages = this.activeLanguage;
628 var packageName = this.activeName;
629 string platform = null;
630 string platformValue = null;
631 var security = YesNoDefaultType.Default;
632 var sourceBits = (this.compilingModule ? 2 : 0);
633 var installPrivilegeSeen = false;
634 var installScopeSeen = false;
635
636 switch (this.CurrentPlatform)
637 {
638 case Platform.X86:
639 platform = "Intel";
640 break;
641 case Platform.X64:
642 platform = "x64";
643 msiVersion = 200;
644 break;
645 case Platform.ARM64:
646 platform = "Arm64";
647 msiVersion = 500;
648 break;
649 default:
650 throw new ArgumentException("Unknown platform enumeration '{0}' encountered.", this.CurrentPlatform.ToString());
651 }
652 782
653 foreach (var attrib in node.Attributes()) 783 foreach (var attrib in node.Attributes())
654 { 784 {
@@ -656,83 +786,15 @@ namespace WixToolset.Core
656 { 786 {
657 switch (attrib.Name.LocalName) 787 switch (attrib.Name.LocalName)
658 { 788 {
659 case "Id": 789 case "Codepage":
660 packageCode = this.Core.GetAttributeGuidValue(sourceLineNumbers, attrib, this.compilingProduct); 790 codepage = this.Core.GetAttributeLocalizableCodePageValue(sourceLineNumbers, attrib, true);
661 break;
662 case "AdminImage":
663 if (YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib))
664 {
665 sourceBits |= 4;
666 }
667 break;
668 case "Comments":
669 comments = this.Core.GetAttributeValue(sourceLineNumbers, attrib);
670 break;
671 case "Compressed":
672 // merge modules must always be compressed, so this attribute is invalid
673 if (this.compilingModule)
674 {
675 this.Core.Write(WarningMessages.DeprecatedPackageCompressedAttribute(sourceLineNumbers));
676 // this.core.OnMessage(WixErrors.IllegalAttributeWhenNested(sourceLineNumbers, node.Name.LocalName, "Compressed", "Module"));
677 }
678 else if (YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib))
679 {
680 sourceBits |= 2;
681 }
682 break; 791 break;
683 case "Description": 792 case "Description":
684 packageName = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 793 packageName = this.Core.GetAttributeValue(sourceLineNumbers, attrib);
685 break; 794 break;
686 case "InstallPrivileges":
687 var installPrivileges = this.Core.GetAttributeValue(sourceLineNumbers, attrib);
688 switch (installPrivileges)
689 {
690 case "elevated":
691 // this is the default setting
692 installPrivilegeSeen = true;
693 break;
694 case "limited":
695 sourceBits |= 8;
696 installPrivilegeSeen = true;
697 break;
698 case "":
699 break;
700 default:
701 this.Core.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, installPrivileges, "elevated", "limited"));
702 break;
703 }
704 break;
705 case "InstallScope":
706 var installScope = this.Core.GetAttributeValue(sourceLineNumbers, attrib);
707 switch (installScope)
708 {
709 case "perMachine":
710 this.Core.AddSymbol(new PropertySymbol(sourceLineNumbers, new Identifier(AccessModifier.Public, "ALLUSERS"))
711 {
712 Value = "1"
713 });
714 installScopeSeen = true;
715 break;
716 case "perUser":
717 sourceBits |= 8;
718 installScopeSeen = true;
719 break;
720 case "":
721 break;
722 default:
723 this.Core.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, installScope, "perMachine", "perUser"));
724 break;
725 }
726 break;
727 case "InstallerVersion":
728 msiVersion = this.Core.GetAttributeIntegerValue(sourceLineNumbers, attrib, 0, Int32.MaxValue);
729 break;
730 case "Keywords": 795 case "Keywords":
731 keywords = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 796 keywords = this.Core.GetAttributeValue(sourceLineNumbers, attrib);
732 break; 797 break;
733 case "Languages":
734 packageLanguages = this.Core.GetAttributeValue(sourceLineNumbers, attrib);
735 break;
736 case "Manufacturer": 798 case "Manufacturer":
737 packageAuthor = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 799 packageAuthor = this.Core.GetAttributeValue(sourceLineNumbers, attrib);
738 if ("PUT-COMPANY-NAME-HERE" == packageAuthor) 800 if ("PUT-COMPANY-NAME-HERE" == packageAuthor)
@@ -740,56 +802,6 @@ namespace WixToolset.Core
740 this.Core.Write(WarningMessages.PlaceholderValue(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, packageAuthor)); 802 this.Core.Write(WarningMessages.PlaceholderValue(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, packageAuthor));
741 } 803 }
742 break; 804 break;
743 case "Platform":
744 if (null != platformValue)
745 {
746 this.Core.Write(ErrorMessages.IllegalAttributeWithOtherAttribute(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, "Platforms"));
747 }
748
749 platformValue = this.Core.GetAttributeValue(sourceLineNumbers, attrib);
750 switch (platformValue)
751 {
752 case "intel":
753 this.Core.Write(WarningMessages.DeprecatedAttributeValue(sourceLineNumbers, platformValue, node.Name.LocalName, attrib.Name.LocalName, "x86"));
754 goto case "x86";
755 case "x86":
756 platform = "Intel";
757 break;
758 case "x64":
759 platform = "x64";
760 break;
761 case "arm64":
762 platform = "Arm64";
763 break;
764 case "":
765 break;
766 default:
767 this.Core.Write(ErrorMessages.InvalidPlatformValue(sourceLineNumbers, platformValue));
768 break;
769 }
770 break;
771 case "Platforms":
772 if (null != platformValue)
773 {
774 this.Core.Write(ErrorMessages.IllegalAttributeWithOtherAttribute(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, "Platform"));
775 }
776
777 this.Core.Write(WarningMessages.DeprecatedAttribute(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, "Platform"));
778 platformValue = this.Core.GetAttributeValue(sourceLineNumbers, attrib);
779 platform = platformValue;
780 break;
781 case "ReadOnly":
782 security = this.Core.GetAttributeYesNoDefaultValue(sourceLineNumbers, attrib);
783 break;
784 case "ShortNames":
785 if (YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib))
786 {
787 sourceBits |= 1;
788 }
789 break;
790 case "SummaryCodepage":
791 codepage = this.Core.GetAttributeLocalizableCodePageValue(sourceLineNumbers, attrib, true);
792 break;
793 default: 805 default:
794 this.Core.UnexpectedAttribute(node, attrib); 806 this.Core.UnexpectedAttribute(node, attrib);
795 break; 807 break;
@@ -801,127 +813,50 @@ namespace WixToolset.Core
801 } 813 }
802 } 814 }
803 815
804 if (installPrivilegeSeen && installScopeSeen) 816 this.Core.ParseForExtensionElements(node);
805 {
806 this.Core.Write(ErrorMessages.IllegalAttributeWithOtherAttribute(sourceLineNumbers, node.Name.LocalName, "InstallPrivileges", "InstallScope"));
807 }
808
809 if (String.Equals(platform, "X64", StringComparison.OrdinalIgnoreCase) && 200 > msiVersion)
810 {
811 msiVersion = 200;
812 this.Core.Write(WarningMessages.RequiresMsi200for64bitPackage(sourceLineNumbers));
813 }
814
815 if (String.Equals(platform, "Arm64", StringComparison.OrdinalIgnoreCase) && 500 > msiVersion)
816 {
817 msiVersion = 500;
818 this.Core.Write(WarningMessages.RequiresMsi500forArmPackage(sourceLineNumbers));
819 }
820
821 if (null == packageAuthor)
822 {
823 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Manufacturer"));
824 }
825 817
826 if (this.compilingModule) 818 if (!this.Core.EncounteredError)
827 { 819 {
828 if (null == packageCode) 820 if (null != codepage)
829 { 821 {
830 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id")); 822 isCodepageSet = true;
823 this.Core.AddSymbol(new SummaryInformationSymbol(sourceLineNumbers)
824 {
825 PropertyId = SummaryInformationType.Codepage,
826 Value = codepage
827 });
831 } 828 }
832 829
833 // merge modules use the modularization guid as the package code 830 if (null != packageName)
834 if (null != moduleId)
835 { 831 {
836 packageCode = moduleId; 832 isPackageNameSet = true;
833 this.Core.AddSymbol(new SummaryInformationSymbol(sourceLineNumbers)
834 {
835 PropertyId = SummaryInformationType.Subject,
836 Value = packageName
837 });
837 } 838 }
838 839
839 // merge modules are always compressed 840 if (null != packageAuthor)
840 sourceBits = 2;
841 }
842 else // product
843 {
844 if (null == packageCode)
845 { 841 {
846 packageCode = "*"; 842 isPackageAuthorSet = true;
843 this.Core.AddSymbol(new SummaryInformationSymbol(sourceLineNumbers)
844 {
845 PropertyId = SummaryInformationType.Author,
846 Value = packageAuthor
847 });
847 } 848 }
848 849
849 if ("*" != packageCode) 850 if (null != keywords)
850 { 851 {
851 this.Core.Write(WarningMessages.PackageCodeSet(sourceLineNumbers)); 852 isKeywordsSet = true;
853 this.Core.AddSymbol(new SummaryInformationSymbol(sourceLineNumbers)
854 {
855 PropertyId = SummaryInformationType.Keywords,
856 Value = keywords
857 });
852 } 858 }
853 } 859 }
854
855 this.Core.ParseForExtensionElements(node);
856
857 if (!this.Core.EncounteredError)
858 {
859 this.Core.AddSymbol(new SummaryInformationSymbol(sourceLineNumbers)
860 {
861 PropertyId = SummaryInformationType.Codepage,
862 Value = codepage
863 });
864
865 this.Core.AddSymbol(new SummaryInformationSymbol(sourceLineNumbers)
866 {
867 PropertyId = SummaryInformationType.Title,
868 Value = "Installation Database"
869 });
870
871 this.Core.AddSymbol(new SummaryInformationSymbol(sourceLineNumbers)
872 {
873 PropertyId = SummaryInformationType.Subject,
874 Value = packageName
875 });
876
877 this.Core.AddSymbol(new SummaryInformationSymbol(sourceLineNumbers)
878 {
879 PropertyId = SummaryInformationType.Author,
880 Value = packageAuthor
881 });
882
883 this.Core.AddSymbol(new SummaryInformationSymbol(sourceLineNumbers)
884 {
885 PropertyId = SummaryInformationType.Keywords,
886 Value = keywords
887 });
888
889 this.Core.AddSymbol(new SummaryInformationSymbol(sourceLineNumbers)
890 {
891 PropertyId = SummaryInformationType.Comments,
892 Value = comments
893 });
894
895 this.Core.AddSymbol(new SummaryInformationSymbol(sourceLineNumbers)
896 {
897 PropertyId = SummaryInformationType.PlatformAndLanguage,
898 Value = String.Format(CultureInfo.InvariantCulture, "{0};{1}", platform, packageLanguages)
899 });
900
901 this.Core.AddSymbol(new SummaryInformationSymbol(sourceLineNumbers)
902 {
903 PropertyId = SummaryInformationType.PackageCode,
904 Value = packageCode
905 });
906
907 this.Core.AddSymbol(new SummaryInformationSymbol(sourceLineNumbers)
908 {
909 PropertyId = SummaryInformationType.WindowsInstallerVersion,
910 Value = msiVersion.ToString(CultureInfo.InvariantCulture)
911 });
912
913 this.Core.AddSymbol(new SummaryInformationSymbol(sourceLineNumbers)
914 {
915 PropertyId = SummaryInformationType.WordCount,
916 Value = sourceBits.ToString(CultureInfo.InvariantCulture)
917 });
918
919 this.Core.AddSymbol(new SummaryInformationSymbol(sourceLineNumbers)
920 {
921 PropertyId = SummaryInformationType.Security,
922 Value = YesNoDefaultType.No == security ? "0" : YesNoDefaultType.Yes == security ? "4" : "2"
923 });
924 }
925 } 860 }
926 861
927 /// <summary> 862 /// <summary>