diff options
| author | Roy Ben-Shabat <Roy@Twine-s.com> | 2019-02-25 16:03:14 +0200 |
|---|---|---|
| committer | Roy Ben-Shabat <Roy@Twine-s.com> | 2019-02-25 16:03:14 +0200 |
| commit | 08d9858ecd0d4adb0c9c6076d7d2b1216e8f64c3 (patch) | |
| tree | b1f11d302b4db5346213b7c93c78d4b9500d8398 /Software/Visual_Studio/Tango.AdvancedInstaller | |
| parent | 602f49b2b0eb1f032f3dead60e8bf499ceca0a7b (diff) | |
| download | Tango-08d9858ecd0d4adb0c9c6076d7d2b1216e8f64c3.tar.gz Tango-08d9858ecd0d4adb0c9c6076d7d2b1216e8f64c3.zip | |
Completed advanced installer lib + unit test.
Diffstat (limited to 'Software/Visual_Studio/Tango.AdvancedInstaller')
4 files changed, 284 insertions, 25 deletions
diff --git a/Software/Visual_Studio/Tango.AdvancedInstaller/InstallerBuilder.cs b/Software/Visual_Studio/Tango.AdvancedInstaller/InstallerBuilder.cs index c9c5f73c3..ed52aeb05 100644 --- a/Software/Visual_Studio/Tango.AdvancedInstaller/InstallerBuilder.cs +++ b/Software/Visual_Studio/Tango.AdvancedInstaller/InstallerBuilder.cs @@ -11,34 +11,91 @@ namespace Tango.AdvancedInstaller { public String AdvancedInstallerPath { get; set; } - public String ProjectFile { get; set; } + public String ProjectFile { get; private set; } - public String OutputFolder { get; set; } + private InstallerBuilder() + { + AdvancedInstallerPath = @"C:\Program Files (x86)\Caphyon\Advanced Installer 15.6\bin\x86\AdvancedInstaller.com"; + } - public String ProductVersion { get; set; } + public InstallerBuilder(String projectFile) : this() + { + ProjectFile = projectFile; + } - public String ProductName { get; set; } + public InstallerBuilder(String advancedInstallerPath, String projectFile) : this(projectFile) + { + AdvancedInstallerPath = advancedInstallerPath; + } - public PackageType PackageType { get; set; } + public Task<String> GetProperty(ProjectProperty property) + { + return Task.Factory.StartNew<String>(() => + { + CmdCommand command = new CmdCommand(AdvancedInstallerPath, $"/edit \"{ProjectFile}\" /GetProperty {property.ToString()}"); + var result = command.Run().Result; + return result.StandardOutput.Replace("\r", "").Replace("\n", ""); + }); + } - public InstallerBuilder() + public Task SetProperty(ProjectProperty property, String value) { - AdvancedInstallerPath = @"C:\Program Files (x86)\Caphyon\Advanced Installer 15.6\bin\x86\advinst.exe"; + return Task.Factory.StartNew(() => + { + CmdCommand command = new CmdCommand(AdvancedInstallerPath, $"/edit \"{ProjectFile}\" /SetProperty {property.ToString()}=\"{value}\""); + command.Run().Wait(); + + String propValue = GetProperty(property).Result; + + if (propValue != value) + { + throw new ArgumentException("The property set command had succeeded but the property value validation has failed."); + } + }); } - public Task Build() + public Task Build(String productVersion, String outputFile) { return Task.Factory.StartNew(() => { - CmdCommand command = new CmdCommand(AdvancedInstallerPath, $"/edit \"{ProjectFile}\" /SetVersion {ProductVersion}"); + CmdCommand command = new CmdCommand(AdvancedInstallerPath, $"/edit \"{ProjectFile}\" /SetVersion {productVersion}"); command.Run().Wait(); - command = new CmdCommand(AdvancedInstallerPath, $"/edit \"{ProjectFile}\" /SetPackageName \"{OutputFolder}\\{ProductName}_v{ProductVersion}.{PackageType.ToString().ToLower()}\" -buildname DefaultBuild"); + command = new CmdCommand(AdvancedInstallerPath, $"/edit \"{ProjectFile}\" /SetPackageName \"{outputFile}\" -buildname DefaultBuild"); command.Run().Wait(); command = new CmdCommand(AdvancedInstallerPath, $"/rebuild \"{ProjectFile}\""); + command.Timeout = TimeSpan.FromMinutes(2); + command.Run().Wait(); + }); + } + + public Task Uninstall() + { + return Task.Factory.StartNew(() => + { + String productName = GetProperty(ProjectProperty.ProductName).Result; + CmdCommand command = new CmdCommand("wmic", $"product where name=\"{productName}\" call uninstall /nointeractive"); + command.ExitStrategy = CmdCommand.ExitStrategies.StandardOutput; command.Run().Wait(); }); } + + public Task<bool> IsInstalled() + { + return Task.Factory.StartNew<bool>(() => + { + String productName = GetProperty(ProjectProperty.ProductName).Result; + CmdCommand command = new CmdCommand("wmic", $"product get name"); + command.ExitStrategy = CmdCommand.ExitStrategies.StandardOutput; + var result = command.Run().Result; + + List<String> list = result.StandardOutput.Split(new[] { '\r', '\n' }).ToList(); + + bool found = list.Any(x => x.Trim() == productName); + + return found; + }); + } } } diff --git a/Software/Visual_Studio/Tango.AdvancedInstaller/PackageType.cs b/Software/Visual_Studio/Tango.AdvancedInstaller/PackageType.cs deleted file mode 100644 index 75120665c..000000000 --- a/Software/Visual_Studio/Tango.AdvancedInstaller/PackageType.cs +++ /dev/null @@ -1,14 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace Tango.AdvancedInstaller -{ - public enum PackageType - { - MSI, - EXE, - } -} diff --git a/Software/Visual_Studio/Tango.AdvancedInstaller/ProjectProperty.cs b/Software/Visual_Studio/Tango.AdvancedInstaller/ProjectProperty.cs new file mode 100644 index 000000000..ea9112dd3 --- /dev/null +++ b/Software/Visual_Studio/Tango.AdvancedInstaller/ProjectProperty.cs @@ -0,0 +1,216 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Tango.AdvancedInstaller +{ + public enum ProjectProperty + { + ACTION, + ADDDEFAULT, + ADDLOCAL, + ADDSOURCE, + AdminProperties, + AdminToolsFolder, + AdminUser, + ADVERTISE, + AFTERREBOOT, + ALLUSERS, + Alpha, + AppDataFolder, + ARPAUTHORIZEDCDFPREFIX, + ARPCOMMENTS, + ARPCONTACT, + ARPHELPLINK, + ARPHELPTELEPHONE, + ARPINSTALLLOCATION, + ARPNOMODIFY, + ARPNOREMOVE, + ARPNOREPAIR, + ARPPRODUCTICON, + ARPREADME, + ARPSIZE, + ARPSYSTEMCOMPONENT, + ARPURLINFOABOUT, + ARPURLUPDATEINFO, + AVAILABLEFREEREG, + BorderSide, + BorderTop, + CaptionHeight, + CCP_DRIVE, + ColorBits, + CommonAppDataFolder, + CommonFiles64Folder, + CommonFilesFolder, + COMPADDDEFAULT, + COMPADDLOCAL, + COMPADDSOURCE, + COMPANYNAME, + ComputerName, + CostingComplete, + Date, + DefaultUIFont, + DesktopFolder, + DISABLEADVTSHORTCUTS, + DISABLEMEDIA, + DISABLEROLLBACK, + DiskPrompt, + EnableUserControl, + EXECUTEACTION, + EXECUTEMODE, + FASTOEM, + FavoritesFolder, + FILEADDDEFAULT, + FILEADDLOCAL, + FILEADDSOURCE, + FontsFolder, + Installed, + INSTALLLEVEL, + Intel, + Intel64, + IsAdminPackage, + LeftUnit, + LIMITUI, + LocalAppDataFolder, + LOGACTION, + LogonUser, + Manufacturer, + MEDIAPACKAGEPATH, + MediaSourceDir, + MSIARPSETTINGSIDENTIFIER, + MSICHECKCRCS, + MSIDEPLOYMENTCOMPLIANT, + MSIDISABLEEEUI, + MSIDISABLELUAPATCHING, + MSIDISABLERMRESTART, + MSIENFORCEUPGRADECOMPONENTRULES, + MSIFASTINSTALL, + MsiHiddenProperties, + MSIINSTALLPERUSER, + MSIINSTANCEGUID, + MsiLogFileLocation, + MsiLogging, + MsiNetAssemblySupport, + MSINEWINSTANCE, + MSINODISABLEMEDIA, + MsiNTProductType, + MsiNTSuiteBackOffice, + MsiNTSuiteDataCenter, + MsiNTSuiteEnterprise, + MsiNTSuitePersonal, + MsiNTSuiteSmallBusiness, + MsiNTSuiteSmallBusinessRestricted, + MsiNTSuiteWebServer, + MsiPatchRemovalList, + MSIPATCHREMOVE, + MSIRESTARTMANAGERCONTROL, + MsiRestartManagerSessionKey, + MSIRMSHUTDOWN, + MsiRunningElevated, + MsiSystemRebootPending, + MsiTabletPC, + MsiUIHideCancel, + MsiUIProgressOnly, + MsiUISourceResOnly, + MSIUNINSTALLSUPERSEDEDCOMPONENTS, + MSIUSEREALADMINDETECTION, + MsiWin32AssemblySupport, + Msix64, + MyPicturesFolder, + NetHoodFolder, + NOCOMPANYNAME, + NOUSERNAME, + OLEAdvtSupport, + OriginalDatabase, + OutOfDiskSpace, + OutOfNoRbDiskSpace, + ParentOriginalDatabase, + ParentProductCode, + PATCH, + PATCHNEWPACKAGECODE, + PATCHNEWSUMMARYCOMMENTS, + PATCHNEWSUMMARYSUBJECT, + PersonalFolder, + PhysicalMemory, + PIDKEY, + PIDTemplate, + Preselected, + PRIMARYFOLDER, + PrimaryVolumePath, + PrimaryVolumeSpaceAvailable, + PrimaryVolumeSpaceRemaining, + PrimaryVolumeSpaceRequired, + PrintHoodFolder, + Privileged, + ProductCode, + ProductID, + ProductLanguage, + ProductName, + ProductState, + ProductVersion, + ProgramFiles64Folder, + ProgramFilesFolder, + ProgramMenuFolder, + PROMPTROLLBACKCOST, + REBOOT, + REBOOTPROMPT, + RecentFolder, + RedirectedDLLSupport, + REINSTALL, + REINSTALLMODE, + RemoteAdminTS, + REMOVE, + ReplacedInUseFiles, + RestrictedUserControl, + RESUME, + RollbackDisabled, + ROOTDRIVE, + ScreenX, + ScreenY, + SecureCustomProperties, + SendToFolder, + SEQUENCE, + ServicePackLevel, + ServicePackLevelMinor, + SharedWindows, + ShellAdvtSupport, + SHORTFILENAMES, + SourceDir, + SOURCELIST, + StartMenuFolder, + StartupFolder, + System16Folder, + System64Folder, + SystemFolder, + SystemLanguageID, + TARGETDIR, + TempFolder, + TemplateFolder, + TerminalServer, + TextHeight, + Time, + TRANSFORMS, + TRANSFORMSATSOURCE, + TRANSFORMSSECURE, + TTCSupport, + UILevel, + UpdateStarted, + UpgradeCode, + UPGRADINGPRODUCTCODE, + UserLanguageID, + USERNAME, + UserSID, + Version9X, + VersionDatabase, + VersionMsi, + VersionNT, + VersionNT64, + VirtualMemory, + WindowsBuild, + WindowsFolder, + WindowsVolume, + + } +} diff --git a/Software/Visual_Studio/Tango.AdvancedInstaller/Tango.AdvancedInstaller.csproj b/Software/Visual_Studio/Tango.AdvancedInstaller/Tango.AdvancedInstaller.csproj index 2062df763..766cf51c3 100644 --- a/Software/Visual_Studio/Tango.AdvancedInstaller/Tango.AdvancedInstaller.csproj +++ b/Software/Visual_Studio/Tango.AdvancedInstaller/Tango.AdvancedInstaller.csproj @@ -45,7 +45,7 @@ <Link>GlobalVersionInfo.cs</Link> </Compile> <Compile Include="InstallerBuilder.cs" /> - <Compile Include="PackageType.cs" /> + <Compile Include="ProjectProperty.cs" /> <Compile Include="Properties\AssemblyInfo.cs" /> <Compile Include="ReturnCodes.cs" /> </ItemGroup> |
