diff --git a/VSLXshared/DataModel/VisualStudioInstance.cs b/VSLXshared/DataModel/VisualStudioInstance.cs
index 4420a72..d52f3c0 100644
--- a/VSLXshared/DataModel/VisualStudioInstance.cs
+++ b/VSLXshared/DataModel/VisualStudioInstance.cs
@@ -59,6 +59,11 @@ public string ShortName
///
public string ShortVersion { get { return String.Join('.', this.Version.Split('.').Take(2)); } }
+ ///
+ /// Gets the main version number, only major version
+ ///
+ public string MainVersion { get { return this.Version.Split('.').First(); } }
+
///
/// Gets the release year/version
///
diff --git a/VSLXshared/DataModel/VisualStudioInstanceManager.cs b/VSLXshared/DataModel/VisualStudioInstanceManager.cs
index 43c7233..712bc55 100644
--- a/VSLXshared/DataModel/VisualStudioInstanceManager.cs
+++ b/VSLXshared/DataModel/VisualStudioInstanceManager.cs
@@ -41,7 +41,7 @@ public class VisualStudioInstanceManager
///
public VisualStudioInstanceManager()
{
- allInstances = ReadAllInstances();
+ allInstances = ReadAllInstances() ?? new List(); // just to not crash if no instances are found
}
///
@@ -67,7 +67,7 @@ public int Count
/// Gets the installer path.
///
public static string InstallerPath
- {
+ {
get
{
string location = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles), "Microsoft Visual Studio", "Installer");
@@ -75,7 +75,7 @@ public static string InstallerPath
string installerPath = Path.Combine(location, "vs_installer.exe");
string installerPath86 = Path.Combine(location86, "vs_installer.exe");
- if(Directory.Exists(location) || Directory.Exists(location86))
+ if (Directory.Exists(location) || Directory.Exists(location86))
{
if (File.Exists(installerPath))
{
@@ -114,60 +114,143 @@ public VisualStudioInstance this[string version]
}
}
+ ///
+ /// Reads the all installed Visual Studio instances, using either the original WMI class, the the WMI class in the new namespace, or finally the VS Setup API
+ ///
+ /// A list of VisualStudioInstances.
+ public static List? ReadAllInstances()
+ {
+ List? list = null;
+
+ try
+ {
+ list = ReadAllInstancesFromWMI1();
+ }
+ catch (System.Exception ex)
+ {
+ Debug.WriteLine($"Original MSFT_VSInstance WMi class not found or not able to read. ({ex.Message})");
+ }
+
+ if (list is null)
+ {
+ try
+ {
+ list = ReadAllInstancesFromWMI2();
+ }
+ catch (System.Exception ex)
+ {
+ Debug.WriteLine($"New MSFT_VSInstance WMi class not found or not able to read. ({ex.Message})");
+ }
+ }
+
+ if (list is null)
+ {
+ try
+ {
+ list = ReadAllInstancesFromSetupApi();
+ }
+ catch (System.Exception ex)
+ {
+ Debug.WriteLine($"failed to read from VS Setup API, no Visual Studio installation information available. ({ex.Message})");
+ }
+ }
+
+ return list;
+ }
+
///
/// Reads the all installed Visual Studio instances from WMI
///
/// A list of VisualStudioInstances.
- public static List ReadAllInstances()
+ public static List ReadAllInstancesFromWMI1()
{
var list = new List();
// read all data from WMI using CimInstance MSFT_VSInstance
// https://docs.microsoft.com/en-us/windows/win32/wmisdk/msft-vsinstance
- try
+ ManagementObjectSearcher searcher = new ManagementObjectSearcher
{
- ManagementObjectSearcher searcher = new ManagementObjectSearcher
- {
- Query = new SelectQuery("MSFT_VSInstance ", "", new[] { "Name", "Version", "ProductLocation", "IdentifyingNumber" })
- };
- ManagementObjectCollection collection = searcher.Get();
- ManagementObjectCollection.ManagementObjectEnumerator em = collection.GetEnumerator();
-
- while (em.MoveNext())
+ Query = new SelectQuery("MSFT_VSInstance ", "", new[] { "Name", "Version", "ProductLocation", "IdentifyingNumber" })
+ };
+ ManagementObjectCollection collection = searcher.Get();
+ ManagementObjectCollection.ManagementObjectEnumerator em = collection.GetEnumerator();
+
+ while (em.MoveNext())
+ {
+ ManagementBaseObject baseObj = em.Current;
+ if (baseObj.Properties["Version"].Value != null)
{
- ManagementBaseObject baseObj = em.Current;
- if (baseObj.Properties["Version"].Value != null)
+ try
{
- try
- {
- string? name = baseObj.Properties["Name"].Value.ToString();
- string? version = baseObj.Properties["Version"].Value.ToString();
- string? location = baseObj.Properties["ProductLocation"].Value.ToString();
- string? identifier = baseObj.Properties["IdentifyingNumber"].Value.ToString();
-
- if (name != null && version != null && location != null && identifier != null)
- {
- list.Add(new VisualStudioInstance(name, version, location, identifier, VisualStudioInstanceManager.YearFromVersion(version[..2])));
- }
- }
- catch (Exception ex)
+ string? name = baseObj.Properties["Name"].Value.ToString();
+ string? version = baseObj.Properties["Version"].Value.ToString();
+ string? location = baseObj.Properties["ProductLocation"].Value.ToString();
+ string? identifier = baseObj.Properties["IdentifyingNumber"].Value.ToString();
+
+ if (name != null && version != null && location != null && identifier != null)
{
- Debug.WriteLine(ex.ToString());
+ list.Add(new VisualStudioInstance(name, version, location, identifier, VisualStudioInstanceManager.YearFromVersion(version[..2])));
}
}
+ catch (Exception ex)
+ {
+ Debug.WriteLine(ex.ToString());
+ }
}
-
- em?.Dispose();
- collection?.Dispose();
- searcher?.Dispose();
-
}
- catch
+
+ em?.Dispose();
+ collection?.Dispose();
+ searcher?.Dispose();
+
+
+ list.Sort((x, y) => x.Version.CompareTo(y.Version));
+
+ return list;
+ }
+
+ public static List ReadAllInstancesFromWMI2()
+ {
+ var list = new List();
+ // read all data from WMI using CimInstance MSFT_VSInstance but in the new VS namespace
+
+ ManagementScope scope = new ManagementScope("root/cimv2/vs");
+ ManagementObjectSearcher searcher = new ManagementObjectSearcher
+ {
+ Query = new SelectQuery("MSFT_VSInstance ", "", new[] { "Name", "Version", "ProductLocation", "IdentifyingNumber" }),
+ Scope = scope
+ };
+ ManagementObjectCollection collection = searcher.Get();
+ ManagementObjectCollection.ManagementObjectEnumerator em = collection.GetEnumerator();
+
+ while (em.MoveNext())
{
- // something went wrong, try the alternative way using the Setup API
- list = ReadAllInstancesFromSetupApi();
+ ManagementBaseObject baseObj = em.Current;
+ if (baseObj.Properties["Version"].Value != null)
+ {
+ try
+ {
+ string? name = baseObj.Properties["Name"].Value.ToString();
+ string? version = baseObj.Properties["Version"].Value.ToString();
+ string? location = baseObj.Properties["ProductLocation"].Value.ToString();
+ string? identifier = baseObj.Properties["IdentifyingNumber"].Value.ToString();
+
+ if (name != null && version != null && location != null && identifier != null)
+ {
+ list.Add(new VisualStudioInstance(name, version, location, identifier, VisualStudioInstanceManager.YearFromVersion(version[..2])));
+ }
+ }
+ catch (Exception ex)
+ {
+ Debug.WriteLine(ex.ToString());
+ }
+ }
}
-
+
+ em?.Dispose();
+ collection?.Dispose();
+ searcher?.Dispose();
+
list.Sort((x, y) => x.Version.CompareTo(y.Version));
return list;
@@ -267,7 +350,7 @@ public VsItemList GetRecentProjects(bool bOnlyDefaultInstances)
{
VsFolder solutionList = new VsFolder();
- var vsDir = new DirectoryInfo(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "Microsoft", "VisualStudio"));
+ var vsDir = new DirectoryInfo(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "Microsoft", "VisualStudio"));
foreach (var dir in vsDir.GetDirectories("*", SearchOption.AllDirectories))
{
@@ -330,7 +413,7 @@ public VsItemList GetRecentProjects(bool bOnlyDefaultInstances)
catch (DirectoryNotFoundException)
{
}
- catch(NullReferenceException)
+ catch (NullReferenceException)
{
// possibly invalid file
}
@@ -373,7 +456,7 @@ public VisualStudioInstance GetByName(string name)
if (string.IsNullOrEmpty(name))
return HighestVersion();
- var vsi = this.allInstances.Where(x => x.ShortName.Equals(name, StringComparison.InvariantCultureIgnoreCase)).FirstOrDefault();
+ var vsi = this.allInstances.Where(x => x.ShortName.Equals(name, StringComparison.InvariantCultureIgnoreCase)).FirstOrDefault();
return vsi is null ? HighestVersion() : vsi;
}
@@ -388,7 +471,7 @@ public VisualStudioInstance GetByVersion(string? version)
if (string.IsNullOrEmpty(version))
return HighestVersion();
- var vsi = this.allInstances.Where(x => x.Version.StartsWith(version, StringComparison.InvariantCultureIgnoreCase)).FirstOrDefault();
+ var vsi = this.allInstances.Where(x => x.Version.StartsWith(version, StringComparison.InvariantCultureIgnoreCase)).FirstOrDefault();
return vsi is null ? HighestVersion() : vsi;
}
diff --git a/VSLauncherX/MainDialog.Designer.cs b/VSLauncherX/MainDialog.Designer.cs
index 20095a5..e60b378 100644
--- a/VSLauncherX/MainDialog.Designer.cs
+++ b/VSLauncherX/MainDialog.Designer.cs
@@ -32,7 +32,7 @@ protected override void Dispose(bool disposing)
///
private void InitializeComponent()
{
- this.components = new System.ComponentModel.Container();
+ components = new System.ComponentModel.Container();
ToolStripSeparator toolStripMenuItem1;
ToolStripSeparator toolStripMenuItem2;
FlowLayoutPanel flowLayoutPanel2;
@@ -56,7 +56,7 @@ private void InitializeComponent()
olvColumnVersion = new OLVColumn();
olvColumnOptions = new OLVColumn();
optionsRenderer = new MultiImageRenderer();
- imageList3 = new ImageList(this.components);
+ imageList3 = new ImageList(components);
mainPanel = new TableLayoutPanel();
flowLayoutPanel1 = new FlowLayoutPanel();
selectVisualStudioVersion = new VisualStudioCombobox();
@@ -65,10 +65,12 @@ private void InitializeComponent()
btnMainStartVisualStudio3 = new Button();
btnMainStartVisualStudio4 = new Button();
btnMainStartVisualStudio5 = new Button();
- imageListMainIcons = new ImageList(this.components);
+ btnMainOpenActivityLog = new Button();
+ btnVsInstaller = new Button();
+ imageListMainIcons = new ImageList(components);
toolStripStatusLabel3 = new ToolStripStatusLabel();
- tooltipForButtons = new ToolTip(this.components);
- ctxMenu = new ContextMenuStrip(this.components);
+ tooltipForButtons = new ToolTip(components);
+ ctxMenu = new ContextMenuStrip(components);
addToolStripMenuItem = new ToolStripMenuItem();
newGroupToolStripMenuItem = new ToolStripMenuItem();
fromFolderToolStripMenuItem = new ToolStripMenuItem();
@@ -83,7 +85,8 @@ private void InitializeComponent()
favoriteToolStripMenuItem = new ToolStripMenuItem();
statusStrip1 = new StatusStrip();
mainStatusLabel = new ToolStripStatusLabel();
- btnVsInstaller = new Button();
+ gitTimer = new System.Windows.Forms.Timer(components);
+ toolStripStatusGit = new ToolStripStatusLabel();
toolStripMenuItem1 = new ToolStripSeparator();
toolStripMenuItem2 = new ToolStripSeparator();
flowLayoutPanel2 = new FlowLayoutPanel();
@@ -455,6 +458,7 @@ private void InitializeComponent()
flowLayoutPanel1.Controls.Add(btnMainStartVisualStudio3);
flowLayoutPanel1.Controls.Add(btnMainStartVisualStudio4);
flowLayoutPanel1.Controls.Add(btnMainStartVisualStudio5);
+ flowLayoutPanel1.Controls.Add(btnMainOpenActivityLog);
flowLayoutPanel1.FlowDirection = FlowDirection.TopDown;
flowLayoutPanel1.Location = new Point(699, 0);
flowLayoutPanel1.Margin = new Padding(0);
@@ -575,6 +579,42 @@ private void InitializeComponent()
btnMainStartVisualStudio5.UseVisualStyleBackColor = true;
btnMainStartVisualStudio5.Click += btnMainStartVisualStudio5_Click;
//
+ // btnMainOpenActivityLog
+ //
+ btnMainOpenActivityLog.Font = new Font("Segoe UI", 9F, FontStyle.Regular, GraphicsUnit.Point);
+ btnMainOpenActivityLog.ImageAlign = ContentAlignment.MiddleLeft;
+ btnMainOpenActivityLog.Location = new Point(0, 400);
+ btnMainOpenActivityLog.Margin = new Padding(0);
+ btnMainOpenActivityLog.Name = "btnMainOpenActivityLog";
+ btnMainOpenActivityLog.Padding = new Padding(4);
+ btnMainOpenActivityLog.Size = new Size(232, 32);
+ btnMainOpenActivityLog.TabIndex = 6;
+ btnMainOpenActivityLog.Tag = "Open {0} ActivityLog";
+ btnMainOpenActivityLog.Text = "Open ActivityLog";
+ btnMainOpenActivityLog.TextImageRelation = TextImageRelation.ImageBeforeText;
+ tooltipForButtons.SetToolTip(btnMainOpenActivityLog, "Opens the activity log file of Visual Studio");
+ btnMainOpenActivityLog.UseMnemonic = false;
+ btnMainOpenActivityLog.UseVisualStyleBackColor = true;
+ btnMainOpenActivityLog.Click += btnMainOpenActivityLog_Click;
+ //
+ // btnVsInstaller
+ //
+ btnVsInstaller.Font = new Font("Segoe UI", 10F, FontStyle.Bold, GraphicsUnit.Point);
+ btnVsInstaller.Image = Resources.ImportVS1;
+ btnVsInstaller.ImageAlign = ContentAlignment.MiddleLeft;
+ btnVsInstaller.Location = new Point(699, 449);
+ btnVsInstaller.Margin = new Padding(0);
+ btnVsInstaller.Name = "btnVsInstaller";
+ btnVsInstaller.Padding = new Padding(4, 0, 4, 0);
+ btnVsInstaller.Size = new Size(232, 48);
+ btnVsInstaller.TabIndex = 5;
+ btnVsInstaller.Tag = "";
+ btnVsInstaller.Text = "Visual Studio Installer";
+ btnVsInstaller.TextAlign = ContentAlignment.MiddleLeft;
+ btnVsInstaller.TextImageRelation = TextImageRelation.ImageBeforeText;
+ btnVsInstaller.UseVisualStyleBackColor = true;
+ btnVsInstaller.Click += btnVsInstaller_Click;
+ //
// imageListMainIcons
//
imageListMainIcons.ColorDepth = ColorDepth.Depth8Bit;
@@ -692,7 +732,7 @@ private void InitializeComponent()
//
// statusStrip1
//
- statusStrip1.Items.AddRange(new ToolStripItem[] { mainStatusLabel });
+ statusStrip1.Items.AddRange(new ToolStripItem[] { mainStatusLabel, toolStripStatusGit });
statusStrip1.Location = new Point(0, 497);
statusStrip1.Name = "statusStrip1";
statusStrip1.Size = new Size(933, 22);
@@ -702,38 +742,32 @@ private void InitializeComponent()
// mainStatusLabel
//
mainStatusLabel.Name = "mainStatusLabel";
- mainStatusLabel.Size = new Size(193, 17);
+ mainStatusLabel.Size = new Size(896, 17);
+ mainStatusLabel.Spring = true;
mainStatusLabel.Text = "Lets do something incredible today";
+ mainStatusLabel.TextAlign = ContentAlignment.MiddleLeft;
//
- // btnVsInstaller
+ // gitTimer
//
- btnVsInstaller.Font = new Font("Segoe UI", 10F, FontStyle.Bold, GraphicsUnit.Point);
- btnVsInstaller.Image = Resources.ImportVS1;
- btnVsInstaller.ImageAlign = ContentAlignment.MiddleLeft;
- btnVsInstaller.Location = new Point(699, 449);
- btnVsInstaller.Margin = new Padding(0);
- btnVsInstaller.Name = "btnVsInstaller";
- btnVsInstaller.Padding = new Padding(4, 0, 4, 0);
- btnVsInstaller.Size = new Size(232, 48);
- btnVsInstaller.TabIndex = 5;
- btnVsInstaller.Tag = "";
- btnVsInstaller.Text = "Visual Studio Installer";
- btnVsInstaller.TextAlign = ContentAlignment.MiddleLeft;
- btnVsInstaller.TextImageRelation = TextImageRelation.ImageBeforeText;
- btnVsInstaller.UseVisualStyleBackColor = true;
- btnVsInstaller.Click += btnVsInstaller_Click;
+ gitTimer.Interval = 1000;
+ //
+ // toolStripStatusGit
+ //
+ toolStripStatusGit.Name = "toolStripStatusGit";
+ toolStripStatusGit.Size = new Size(22, 17);
+ toolStripStatusGit.Text = "Git";
//
// MainDialog
//
- this.AutoScaleDimensions = new SizeF(7F, 15F);
- this.AutoScaleMode = AutoScaleMode.Font;
- this.ClientSize = new Size(933, 519);
- this.Controls.Add(statusStrip1);
- this.Controls.Add(mainPanel);
- this.Icon = (Icon)resources.GetObject("$this.Icon");
- this.Margin = new Padding(4, 3, 4, 3);
- this.Name = "MainDialog";
- this.Text = "Visual Studio Launcher";
+ AutoScaleDimensions = new SizeF(7F, 15F);
+ AutoScaleMode = AutoScaleMode.Font;
+ ClientSize = new Size(933, 519);
+ Controls.Add(statusStrip1);
+ Controls.Add(mainPanel);
+ Icon = (Icon)resources.GetObject("$this.Icon");
+ Margin = new Padding(4, 3, 4, 3);
+ Name = "MainDialog";
+ Text = "Visual Studio Launcher";
FormClosing += MainDialog_FormClosing;
Load += MainDialog_Load;
flowLayoutPanel2.ResumeLayout(false);
@@ -795,6 +829,9 @@ private void InitializeComponent()
private ToolStripMenuItem favoriteToolStripMenuItem;
private Button btnImportSoP;
private Button btnVsInstaller;
+ private System.Windows.Forms.Timer gitTimer;
+ private Button btnMainOpenActivityLog;
+ private ToolStripStatusLabel toolStripStatusGit;
}
}
diff --git a/VSLauncherX/MainDialog.cs b/VSLauncherX/MainDialog.cs
index 0d46ffa..b93abfb 100644
--- a/VSLauncherX/MainDialog.cs
+++ b/VSLauncherX/MainDialog.cs
@@ -259,9 +259,27 @@ private void MainDialog_Load(object sender, EventArgs e)
SetupTaskbarTasks();
+ gitTimer.Tick += GitTimer_Tick;
+ gitTimer.Interval = 5000;
+ gitTimer.Start();
+
_ = this.txtFilter.Focus();
}
+ ///
+ /// Handles timer ticks to update Git status every 5 seconds
+ ///
+ ///
+ ///
+ private void GitTimer_Tick(object? sender, EventArgs e)
+ {
+ toolStripStatusGit.Visible = true;
+ FetchGitStatus(this.solutionGroups);
+ this.olvFiles.Invalidate();
+ this.olvFiles.Update();
+ toolStripStatusGit.Visible = false;
+ }
+
///
/// Finds the visual studio installer and sets up the button.
///
@@ -270,8 +288,8 @@ private void FindVisualStudioInstaller()
string vsi = VisualStudioInstanceManager.InstallerPath;
btnVsInstaller.Tag = vsi;
-
- if(vsi.StartsWith("http"))
+
+ if (vsi.StartsWith("http"))
{
btnVsInstaller.Text = "Download Visual Studio";
btnVsInstaller.Image = Resources.Download;
@@ -429,7 +447,7 @@ private void MergeNewItem(OLVListItem r, VsItem source)
private void SetupTaskbarTasks()
{
- var cat = new JumpListCustomCategory ( "Test" );
+ var cat = new JumpListCustomCategory("Test");
// Create a jump list.
this.TaskbarJumpList = JumpList.CreateJumpList();
@@ -1485,6 +1503,25 @@ private void btnMainStartVisualStudio5_Click(object sender, EventArgs e)
}
}
+ ///
+ /// Handles click on the btnMainOpenActivityLog button
+ ///
+ /// The sender.
+ /// The event parameters
+ private void btnMainOpenActivityLog_Click(object sender, EventArgs e)
+ {
+ VisualStudioInstance vs = this.visualStudioInstances[this.selectVisualStudioVersion.SelectedIndex];
+ string version = $"{vs.MainVersion}.0_{vs.Identifier}";
+ string s = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
+ ProcessStartInfo psi = new ProcessStartInfo
+ {
+ FileName = $"{s}\\Microsoft\\VisualStudio\\{version}\\ActivityLog.xml",
+ Verb = "open",
+ UseShellExecute = true
+ };
+ Process.Start(psi);
+ }
+
///
/// Handles click on the btnVsInstaller button
///
@@ -1502,7 +1539,7 @@ private void btnVsInstaller_Click(object sender, EventArgs e)
{
// ask user if installer should be started with elevated privileges
bool bIsElevated = AdminInfo.IsCurrentUserAdmin() || AdminInfo.IsElevated();
-
+
if (!bIsElevated && MessageBox.Show("The Visual Studio Installer may required elevated privileges, do you want to run it as administrator?", "Start installer", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
{
ProcessStartInfo psi = new ProcessStartInfo
diff --git a/VSLauncherX/MainDialog.resx b/VSLauncherX/MainDialog.resx
index 2a9614f..20472d8 100644
--- a/VSLauncherX/MainDialog.resx
+++ b/VSLauncherX/MainDialog.resx
@@ -129,9 +129,6 @@
False
-
- False
-
@@ -163,7 +160,7 @@
iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
- vwAADr8BOAVTJAAAAidJREFUSEvtk8trE1EUh7NQ+m/cOJAajVLoIqVCKlnYLNzERTdZSGWCCKULCZTY
+ vAAADrwBlbxySQAAAidJREFUSEvtk8trE1EUh7NQ+m/cOJAajVLoIqVCKlnYLNzERTdZSGWCCKULCZTY
qksNgqSYZTY1pCAjGgJCQiFSWhkSkEDBtI2rNqtmY/Oa7fGew9zr3GQoDcSVHviYe+7j92Ue8ViWBX8T
ElSrVchmsxMFM6UAJ8Lh8ETBzP+CC3EVnP/qTIR/UNDr9mhzv9+HbqfnuseJqyASiUDnvDuyWYRX3n+D
H/vHNBay4b2CEUGlUoFmswmDwUCRiPDtFwV4zJLEWvAVmIXvIArPFYtFAsdYIwLkYPcQDs2fYA0skriF
@@ -242,7 +239,7 @@
AAEAAAD/////AQAAAAAAAAAMAgAAAEZTeXN0ZW0uV2luZG93cy5Gb3JtcywgQ3VsdHVyZT1uZXV0cmFs
LCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5BQEAAAAmU3lzdGVtLldpbmRvd3MuRm9ybXMu
SW1hZ2VMaXN0U3RyZWFtZXIBAAAABERhdGEHAgIAAAAJAwAAAA8DAAAATh4AAAJNU0Z0AUkBTAIBARwB
- AAG4AQEBuAEBARABAAEQAQAE/wEJAQAI/wFCAU0BNgEEBgABNgEEAgABKAMAAUADAAGAAwABAQEAAQgG
+ AAHQAQEB0AEBARABAAEQAQAE/wEJAQAI/wFCAU0BNgEEBgABNgEEAgABKAMAAUADAAGAAwABAQEAAQgG
AAEgGAABgAIAAYADAAKAAQABgAMAAYABAAGAAQACgAIAA8ABAAHAAdwBwAEAAfABygGmAQABMwUAATMB
AAEzAQABMwEAAjMCAAMWAQADHAEAAyIBAAMpAQADVQEAA00BAANCAQADOQEAAYABfAH/AQACUAH/AQAB
kwEAAdYBAAH/AewBzAEAAcYB1gHvAQAB1gLnAQABkAGpAa0CAAH/ATMDAAFmAwABmQMAAcwCAAEzAwAC
@@ -377,12 +374,6 @@
False
-
- 17, 17
-
-
- False
-
iVBORw0KGgoAAAANSUhEUgAAADgAAAA4CAYAAACohjseAAAABGdBTUEAALGPC/xhBQAACshJREFUaEPt
@@ -651,7 +642,7 @@
AAEAAAD/////AQAAAAAAAAAMAgAAAEZTeXN0ZW0uV2luZG93cy5Gb3JtcywgQ3VsdHVyZT1uZXV0cmFs
LCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5BQEAAAAmU3lzdGVtLldpbmRvd3MuRm9ybXMu
SW1hZ2VMaXN0U3RyZWFtZXIBAAAABERhdGEHAgIAAAAJAwAAAA8DAAAAHA8AAAJNU0Z0AUkBTAIBAQoB
- AAGoAQEBqAEBARABAAEQAQAE/wEJAQAI/wFCAU0BNgEEBgABNgEEAgABKAMAAUADAAEwAwABAQEAAQgG
+ AAHAAQEBwAEBARABAAEQAQAE/wEJAQAI/wFCAU0BNgEEBgABNgEEAgABKAMAAUADAAEwAwABAQEAAQgG
AAEMGAABgAIAAYADAAKAAQABgAMAAYABAAGAAQACgAIAA8ABAAHAAdwBwAEAAfABygGmAQABMwUAATMB
AAEzAQABMwEAAjMCAAMWAQADHAEAAyIBAAMpAQADVQEAA00BAANCAQADOQEAAYABfAH/AQACUAH/AQAB
kwEAAdYBAAH/AewBzAEAAcYB1gHvAQAB1gLnAQABkAGpAa0CAAH/ATMDAAFmAwABmQMAAcwCAAEzAwAC
@@ -724,6 +715,9 @@
829, 17
+
+ 946, 17
+
94
diff --git a/VSLauncherX/VSLauncherX.csproj b/VSLauncherX/VSLauncherX.csproj
index 63edd67..125567d 100644
--- a/VSLauncherX/VSLauncherX.csproj
+++ b/VSLauncherX/VSLauncherX.csproj
@@ -13,6 +13,8 @@
app.manifest
true
False
+ 0.1.4.0
+ 0.1.4.0