aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/Tango.AdvancedInstaller
diff options
context:
space:
mode:
authorRoy Ben-Shabat <Roy@Twine-s.com>2019-02-25 16:03:14 +0200
committerRoy Ben-Shabat <Roy@Twine-s.com>2019-02-25 16:03:14 +0200
commit08d9858ecd0d4adb0c9c6076d7d2b1216e8f64c3 (patch)
treeb1f11d302b4db5346213b7c93c78d4b9500d8398 /Software/Visual_Studio/Tango.AdvancedInstaller
parent602f49b2b0eb1f032f3dead60e8bf499ceca0a7b (diff)
downloadTango-08d9858ecd0d4adb0c9c6076d7d2b1216e8f64c3.tar.gz
Tango-08d9858ecd0d4adb0c9c6076d7d2b1216e8f64c3.zip
Completed advanced installer lib + unit test.
Diffstat (limited to 'Software/Visual_Studio/Tango.AdvancedInstaller')
-rw-r--r--Software/Visual_Studio/Tango.AdvancedInstaller/InstallerBuilder.cs77
-rw-r--r--Software/Visual_Studio/Tango.AdvancedInstaller/PackageType.cs14
-rw-r--r--Software/Visual_Studio/Tango.AdvancedInstaller/ProjectProperty.cs216
-rw-r--r--Software/Visual_Studio/Tango.AdvancedInstaller/Tango.AdvancedInstaller.csproj2
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>