private void SetupSoftwareTab( ) { AddDataPageToTabControl(@"Software", tcMain, new DataPageControl <DprComputerSoftware>(this) { CompletionMessage = @"Computer Software Query Complete", QueryDataCb = DprComputerSoftware.Generate, SetupColumnsCb = delegate(DataGridView dgv) { DgvHelpers.GenerateAllColumns(dgv, typeof(DprComputerSoftware), new List <string> { @"ConnectionStatus" }); DgvHelpers.ConvertToLinkColumn(DgvHelpers.GetColumn(dgv, @"HelpLink")); DgvHelpers.ConvertToLinkColumn(DgvHelpers.GetColumn(dgv, @"UrlInfoAbout")); DgvHelpers.SetColumnHeader(DgvHelpers.GetColumn(dgv, @"Guid"), @"GUID"); DgvHelpers.SetColumnHeader(DgvHelpers.GetColumn(dgv, @"Size"), @"Size(MB)"); DgvHelpers.SetColumnHeader(DgvHelpers.GetColumn(dgv, @"ConnectionStatusString"), @"Connection Status"); MoveStatusColumnsFirst(dgv); foreach (var actionName in DprComputerSoftware.SetupActions( ).Keys) { DgvHelpers.AddButtonColumn(dgv, actionName); } } }); }
// public bool ShouldHide { get { return IsHidden( ); } } // // private bool IsHidden( bool shown = false ) { // return !shown && SystemComponent; // } public static void Generate(string computerName, SyncList <DprComputerSoftware> result) { Debug.Assert(null != result, @"result SyncList cannot be null"); Helpers.AssertString(computerName, @"Computer name cannot be empty"); var softwareList = new List <DprComputerSoftware>(); try { string[] regPaths = { @"SOFTWARE\Wow6432node\Microsoft\Windows\CurrentVersion\Uninstall", @"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall" }; foreach (var currentPath in regPaths) { using (var regKey = RegistryKey.OpenRemoteBaseKey(RegistryHive.LocalMachine, computerName).OpenSubKey(currentPath, false)) { if (null == regKey) { continue; } foreach (var currentGuid in regKey.GetSubKeyNames( ).Where(currentValue => currentValue.StartsWith(@"{")).Where(currentGuid => !HasGuid(softwareList, currentGuid))) { using (var curReg = regKey.OpenSubKey(currentGuid, false)) { if (null == curReg || !string.IsNullOrEmpty(RegistryHelpers.GetString(curReg, @"ParentKeyName"))) { continue; } var currentProduct = new DprComputerSoftware(computerName) { Guid = currentGuid, Name = RegistryHelpers.GetString(curReg, @"DisplayName"), Publisher = RegistryHelpers.GetString(curReg, @"Publisher"), Version = RegistryHelpers.GetString(curReg, @"DisplayVersion"), InstallDate = RegistryHelpers.GetDateTime(curReg, @"InstallDate"), CanRemove = 0 == RegistryHelpers.GetDword(curReg, @"NoRemove", 0), //SystemComponent = 1 == RegistryHelpers.GetDword( curReg, @"SystemComponent", 0 ) }; { var estSize = RegistryHelpers.GetDword(curReg, @"EstimatedSize"); if (null != estSize) { currentProduct.Size = (float)Math.Round((float)estSize / 1024.0, 2, MidpointRounding.AwayFromZero); } } currentProduct.HelpLink = RegistryHelpers.GetString(curReg, @"HelpLink"); currentProduct.UrlInfoAbout = RegistryHelpers.GetString(curReg, @"UrlInfoAbout"); if (currentProduct.Valid( )) { softwareList.Add(currentProduct); } } } } } } catch (System.IO.IOException) { result.Add(new DprComputerSoftware(computerName, ConnectionStatuses.ConnectionError)); softwareList.Clear( ); } catch (UnauthorizedAccessException) { result.Add(new DprComputerSoftware(computerName, ConnectionStatuses.AuthorizationError)); softwareList.Clear( ); } catch (System.Security.SecurityException) { result.Add(new DprComputerSoftware(computerName, ConnectionStatuses.AuthorizationError)); softwareList.Clear( ); } result.AddRange(softwareList); ValidateUniqueness(result); }
// public bool ShouldHide { get { return IsHidden( ); } } // // private bool IsHidden( bool shown = false ) { // return !shown && SystemComponent; // } public static void Generate( string computerName, SyncList<DprComputerSoftware> result ) { Debug.Assert( null != result, @"result SyncList cannot be null" ); Helpers.AssertString( computerName, @"Computer name cannot be empty" ); var softwareList = new List<DprComputerSoftware>(); try { string[] regPaths = { @"SOFTWARE\Wow6432node\Microsoft\Windows\CurrentVersion\Uninstall", @"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall" }; foreach( var currentPath in regPaths ) { using( var regKey = RegistryKey.OpenRemoteBaseKey( RegistryHive.LocalMachine, computerName ).OpenSubKey( currentPath, false ) ) { if( null == regKey ) { continue; } foreach( var currentGuid in regKey.GetSubKeyNames( ).Where( currentValue => currentValue.StartsWith( @"{" ) ).Where( currentGuid => !HasGuid( softwareList, currentGuid ) ) ) { using( var curReg = regKey.OpenSubKey( currentGuid, false ) ) { if( null == curReg || !string.IsNullOrEmpty( RegistryHelpers.GetString( curReg, @"ParentKeyName" ) ) ) { continue; } var currentProduct = new DprComputerSoftware( computerName ) { Guid = currentGuid, Name = RegistryHelpers.GetString( curReg, @"DisplayName" ), Publisher = RegistryHelpers.GetString( curReg, @"Publisher" ), Version = RegistryHelpers.GetString( curReg, @"DisplayVersion" ), InstallDate = RegistryHelpers.GetDateTime( curReg, @"InstallDate" ), CanRemove = 0 == RegistryHelpers.GetDword( curReg, @"NoRemove", 0 ), //SystemComponent = 1 == RegistryHelpers.GetDword( curReg, @"SystemComponent", 0 ) }; { var estSize = RegistryHelpers.GetDword( curReg, @"EstimatedSize" ); if( null != estSize ) { currentProduct.Size = (float)Math.Round( (float)estSize / 1024.0, 2, MidpointRounding.AwayFromZero ); } } currentProduct.HelpLink = RegistryHelpers.GetString( curReg, @"HelpLink" ); currentProduct.UrlInfoAbout = RegistryHelpers.GetString( curReg, @"UrlInfoAbout" ); if( currentProduct.Valid( ) ) { softwareList.Add( currentProduct ); } } } } } } catch( System.IO.IOException ) { result.Add( new DprComputerSoftware( computerName, ConnectionStatuses.ConnectionError ) ); softwareList.Clear( ); } catch( UnauthorizedAccessException ) { result.Add( new DprComputerSoftware( computerName, ConnectionStatuses.AuthorizationError ) ); softwareList.Clear( ); } catch( System.Security.SecurityException ) { result.Add( new DprComputerSoftware( computerName, ConnectionStatuses.AuthorizationError ) ); softwareList.Clear( ); } result.AddRange( softwareList ); ValidateUniqueness( result ); }