Ejemplo n.º 1
0
 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);
        }
Ejemplo n.º 3
0
// 		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 );
		}