ReactOS 0.4.17-dev-243-g1369312
CInstalledApplicationInfo Class Reference

#include <appinfo.h>

Inheritance diagram for CInstalledApplicationInfo:
Collaboration diagram for CInstalledApplicationInfo:

Public Member Functions

 CInstalledApplicationInfo (HKEY Key, const CStringW &KeyName, AppsCategories Category, UINT KeyInfo)
 
 ~CInstalledApplicationInfo ()
 
CRegKeyGetRegKey ()
 
virtual BOOL Valid () const override
 
virtual BOOL CanModify () override
 
virtual BOOL RetrieveIcon (CStringW &Path) const override
 
virtual BOOL RetrieveScreenshot (CStringW &Path) override
 
virtual VOID ShowAppInfo (CAppRichEdit *RichEdit) override
 
virtual VOID GetDownloadInfo (CStringW &Url, CStringW &Sha1, ULONG &SizeInBytes) const override
 
virtual VOID GetDisplayInfo (CStringW &License, CStringW &Size, CStringW &UrlSite, CStringW &UrlDownload) override
 
virtual InstallerType GetInstallerType (bool NestedType=false) const override
 
virtual BOOL UninstallApplication (UninstallCommandFlags Flags) override
 
- Public Member Functions inherited from CAppInfo
 CAppInfo (const CStringW &Identifier, AppsCategories Category)
 
virtual ~CAppInfo ()
 
virtual BOOL Valid () const =0
 
virtual BOOL CanModify ()=0
 
virtual BOOL RetrieveIcon (CStringW &Path) const =0
 
virtual BOOL RetrieveScreenshot (CStringW &Path)=0
 
virtual VOID ShowAppInfo (CAppRichEdit *RichEdit)=0
 
virtual VOID GetDownloadInfo (CStringW &Url, CStringW &Sha1, ULONG &SizeInBytes) const =0
 
virtual VOID GetDisplayInfo (CStringW &License, CStringW &Size, CStringW &UrlSite, CStringW &UrlDownload)=0
 
virtual InstallerType GetInstallerType (bool NestedType=false) const
 
virtual InstallerType GetInstallerInfo (CStringW &SilentParameters) const
 
virtual BOOL UninstallApplication (UninstallCommandFlags Flags)=0
 

Public Attributes

UINT m_KeyInfo
 
- Public Attributes inherited from CAppInfo
const CStringW szIdentifier
 
const AppsCategories iCategory
 
CStringW szDisplayIcon
 
CStringW szDisplayName
 
CStringW szDisplayVersion
 
CStringW szComments
 

Private Member Functions

BOOL GetApplicationRegString (LPCWSTR lpKeyName, CStringW &String)
 
BOOL GetApplicationRegDword (LPCWSTR lpKeyName, DWORD *lpValue)
 
VOID AddApplicationRegString (CAppRichEdit *RichEdit, UINT StringID, const CStringW &String, DWORD TextFlags)
 
VOID RetrieveInstallDate ()
 
VOID RetrieveUninstallStrings ()
 

Private Attributes

CRegKey m_hKey
 
CStringW m_szInstallDate
 
CStringW m_szUninstallString
 
CStringW m_szModifyString
 

Detailed Description

Definition at line 207 of file appinfo.h.

Constructor & Destructor Documentation

◆ CInstalledApplicationInfo()

CInstalledApplicationInfo::CInstalledApplicationInfo ( HKEY  Key,
const CStringW KeyName,
AppsCategories  Category,
UINT  KeyInfo 
)

Definition at line 470 of file appinfo.cpp.

474 : CAppInfo(KeyName, Category), m_hKey(Key), m_KeyInfo(KeyInfo)
475{
476 if (GetApplicationRegString(L"DisplayName", szDisplayName))
477 {
481 }
482}
CStringW szComments
Definition: appinfo.h:125
CStringW szDisplayIcon
Definition: appinfo.h:122
CStringW szDisplayName
Definition: appinfo.h:123
CStringW szDisplayVersion
Definition: appinfo.h:124
BOOL GetApplicationRegString(LPCWSTR lpKeyName, CStringW &String)
Definition: appinfo.cpp:712
#define L(x)
Definition: resources.c:13
_Must_inspect_result_ _In_ WDFDEVICE _In_ PCUNICODE_STRING KeyName
Definition: wdfdevice.h:2705

◆ ~CInstalledApplicationInfo()

CInstalledApplicationInfo::~CInstalledApplicationInfo ( )

Definition at line 484 of file appinfo.cpp.

485{
486}

Member Function Documentation

◆ AddApplicationRegString()

VOID CInstalledApplicationInfo::AddApplicationRegString ( CAppRichEdit RichEdit,
UINT  StringID,
const CStringW String,
DWORD  TextFlags 
)
private

Definition at line 489 of file appinfo.cpp.

494{
495 CStringW Tmp;
497 {
498 RichEdit->InsertTextWithString(StringID, Tmp, TextFlags);
499 }
500}
VOID InsertTextWithString(UINT StringID, const CStringW &Text, DWORD TextFlags)
Definition: appview.cpp:310
_Must_inspect_result_ _In_ WDFDEVICE _In_ WDFSTRING String
Definition: wdfdevice.h:2439

Referenced by ShowAppInfo().

◆ CanModify()

BOOL CInstalledApplicationInfo::CanModify ( )
overridevirtual

Implements CAppInfo.

Definition at line 624 of file appinfo.cpp.

625{
627 {
629 }
630
631 return !m_szModifyString.IsEmpty();
632}
bool IsEmpty() const noexcept
Definition: atlsimpstr.h:394
CStringW m_szUninstallString
Definition: appinfo.h:211

◆ GetApplicationRegDword()

BOOL CInstalledApplicationInfo::GetApplicationRegDword ( LPCWSTR  lpKeyName,
DWORD lpValue 
)
private

Definition at line 758 of file appinfo.cpp.

759{
760 DWORD dwSize = sizeof(DWORD), dwType;
761 if (RegQueryValueExW(m_hKey, lpKeyName, NULL, &dwType, (LPBYTE)lpValue, &dwSize) != ERROR_SUCCESS ||
762 dwType != REG_DWORD)
763 {
764 return FALSE;
765 }
766
767 return TRUE;
768}
#define ERROR_SUCCESS
Definition: deptool.c:10
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
LONG WINAPI RegQueryValueExW(_In_ HKEY hkeyorg, _In_ LPCWSTR name, _In_ LPDWORD reserved, _In_ LPDWORD type, _In_ LPBYTE data, _In_ LPDWORD count)
Definition: reg.c:4103
unsigned long DWORD
Definition: ntddk_ex.h:95
PSDBQUERYRESULT_VISTA PVOID DWORD * dwSize
Definition: env.c:56
#define DWORD
Definition: nt_native.h:44
#define REG_DWORD
Definition: sdbapi.c:615
unsigned char * LPBYTE
Definition: typedefs.h:53

Referenced by RetrieveInstallDate(), RetrieveUninstallStrings(), and UninstallApplication().

◆ GetApplicationRegString()

BOOL CInstalledApplicationInfo::GetApplicationRegString ( LPCWSTR  lpKeyName,
CStringW String 
)
private

Definition at line 712 of file appinfo.cpp.

713{
714 ULONG nChars = 0;
715 // Get the size
716 if (m_hKey.QueryStringValue(lpKeyName, NULL, &nChars) != ERROR_SUCCESS)
717 {
718 String.Empty();
719 return FALSE;
720 }
721
722 LPWSTR Buffer = String.GetBuffer(nChars);
723 LONG lResult = m_hKey.QueryStringValue(lpKeyName, Buffer, &nChars);
724 if (nChars > 0 && Buffer[nChars - 1] == UNICODE_NULL)
725 nChars--;
726 String.ReleaseBuffer(nChars);
727
728 if (lResult != ERROR_SUCCESS)
729 {
730 String.Empty();
731 return FALSE;
732 }
733
734 if (String.Find('%') >= 0)
735 {
736 CStringW Tmp;
738 if (dwLen > 0)
739 {
740 BOOL bSuccess = ExpandEnvironmentStringsW(String, Tmp.GetBuffer(dwLen), dwLen) == dwLen;
741 Tmp.ReleaseBuffer(dwLen - 1);
742 if (bSuccess)
743 {
744 String = Tmp;
745 }
746 else
747 {
748 String.Empty();
749 return FALSE;
750 }
751 }
752 }
753
754 return TRUE;
755}
LONG QueryStringValue(LPCTSTR pszValueName, LPTSTR pszValue, ULONG *pnChars) noexcept
Definition: atlbase.h:1240
void ReleaseBuffer(_In_ int nNewLength=-1)
Definition: atlsimpstr.h:387
void Empty() noexcept
Definition: atlsimpstr.h:253
Definition: bufpool.h:45
DWORD WINAPI ExpandEnvironmentStringsW(IN LPCWSTR lpSrc, IN LPWSTR lpDst, IN DWORD nSize)
Definition: environ.c:492
unsigned int BOOL
Definition: ntddk_ex.h:94
#define UNICODE_NULL
long LONG
Definition: pedump.c:60
uint16_t * LPWSTR
Definition: typedefs.h:56
uint32_t ULONG
Definition: typedefs.h:59

Referenced by AddApplicationRegString(), CInstalledApplicationInfo(), RetrieveInstallDate(), RetrieveUninstallStrings(), and UninstallApplication().

◆ GetDisplayInfo()

VOID CInstalledApplicationInfo::GetDisplayInfo ( CStringW License,
CStringW Size,
CStringW UrlSite,
CStringW UrlDownload 
)
overridevirtual

Implements CAppInfo.

Definition at line 654 of file appinfo.cpp.

655{
656 ATLASSERT(FALSE && "Should not be called");
657}
#define ATLASSERT(x)
Definition: CComVariant.cpp:10

◆ GetDownloadInfo()

VOID CInstalledApplicationInfo::GetDownloadInfo ( CStringW Url,
CStringW Sha1,
ULONG SizeInBytes 
) const
overridevirtual

Implements CAppInfo.

Definition at line 648 of file appinfo.cpp.

649{
650 ATLASSERT(FALSE && "Should not be called");
651}

◆ GetInstallerType()

InstallerType CInstalledApplicationInfo::GetInstallerType ( bool  NestedType = false) const
overridevirtual

Reimplemented from CAppInfo.

Definition at line 660 of file appinfo.cpp.

661{
662 CRegKey reg;
664 {
665 return INSTALLER_GENERATE;
666 }
667 return INSTALLER_UNKNOWN;
668}
#define GENERATE_ARPSUBKEY
Definition: appinfo.h:105
@ INSTALLER_UNKNOWN
Definition: appinfo.h:83
@ INSTALLER_GENERATE
Definition: appinfo.h:85
static int reg
Definition: i386-dis.c:1290
#define KEY_READ
Definition: nt_native.h:1026

Referenced by UninstallApplication().

◆ GetRegKey()

CRegKey & CInstalledApplicationInfo::GetRegKey ( )
inline

Definition at line 231 of file appinfo.h.

231{ return m_hKey; }

◆ RetrieveIcon()

BOOL CInstalledApplicationInfo::RetrieveIcon ( CStringW Path) const
overridevirtual

Implements CAppInfo.

Definition at line 635 of file appinfo.cpp.

636{
638 return !Path.IsEmpty();
639}
PRTL_UNICODE_STRING_BUFFER Path

◆ RetrieveInstallDate()

VOID CInstalledApplicationInfo::RetrieveInstallDate ( )
private

Definition at line 539 of file appinfo.cpp.

540{
541 DWORD dwInstallTimeStamp;
542 SYSTEMTIME InstallLocalTime;
543 if (GetApplicationRegString(L"InstallDate", m_szInstallDate))
544 {
545 ZeroMemory(&InstallLocalTime, sizeof(InstallLocalTime));
546 // Check if we have 8 characters to parse the datetime.
547 // Maybe other formats exist as well?
549 if (m_szInstallDate.GetLength() == 8)
550 {
551 InstallLocalTime.wYear = wcstol(m_szInstallDate.Left(4).GetString(), NULL, 10);
552 InstallLocalTime.wMonth = wcstol(m_szInstallDate.Mid(4, 2).GetString(), NULL, 10);
553 InstallLocalTime.wDay = wcstol(m_szInstallDate.Mid(6, 2).GetString(), NULL, 10);
554 }
555 }
556 // It might be a DWORD (Unix timestamp). try again.
557 else if (GetApplicationRegDword(L"InstallDate", &dwInstallTimeStamp))
558 {
559 FILETIME InstallFileTime;
560 SYSTEMTIME InstallSystemTime;
561
562 UnixTimeToFileTime(dwInstallTimeStamp, &InstallFileTime);
563 FileTimeToSystemTime(&InstallFileTime, &InstallSystemTime);
564
565 // convert to localtime
566 SystemTimeToTzSpecificLocalTime(NULL, &InstallSystemTime, &InstallLocalTime);
567 }
568
569 // convert to readable date string
570 int cchTimeStrLen = GetDateFormatW(LOCALE_USER_DEFAULT, 0, &InstallLocalTime, NULL, 0, 0);
571
573 LOCALE_USER_DEFAULT, // use default locale for current user
574 0, &InstallLocalTime, NULL, m_szInstallDate.GetBuffer(cchTimeStrLen), cchTimeStrLen);
576}
void UnixTimeToFileTime(DWORD dwUnixTime, LPFILETIME pFileTime)
Definition: misc.cpp:449
PXSTR GetString() noexcept
Definition: atlsimpstr.h:367
int GetLength() const noexcept
Definition: atlsimpstr.h:362
CStringT Left(int nCount) const
Definition: cstringt.h:776
CStringT & Trim()
Definition: cstringt.h:1046
CStringT Mid(int iFirst, int nCount) const
Definition: cstringt.h:748
BOOL GetApplicationRegDword(LPCWSTR lpKeyName, DWORD *lpValue)
Definition: appinfo.cpp:758
BOOL WINAPI FileTimeToSystemTime(IN CONST FILETIME *lpFileTime, OUT LPSYSTEMTIME lpSystemTime)
Definition: time.c:183
BOOL WINAPI SystemTimeToTzSpecificLocalTime(CONST TIME_ZONE_INFORMATION *lpTimeZoneInformation, CONST SYSTEMTIME *lpUniversalTime, LPSYSTEMTIME lpLocalTime)
Definition: timezone.c:377
_ACRTIMP __msvcrt_long __cdecl wcstol(const wchar_t *, wchar_t **, int)
Definition: wcs.c:2747
INT WINAPI GetDateFormatW(LCID lcid, DWORD dwFlags, const SYSTEMTIME *lpTime, LPCWSTR lpFormat, LPWSTR lpDateStr, INT cchOut)
Definition: lcformat.c:1001
#define ZeroMemory
Definition: minwinbase.h:31
#define LOCALE_USER_DEFAULT

Referenced by ShowAppInfo().

◆ RetrieveScreenshot()

BOOL CInstalledApplicationInfo::RetrieveScreenshot ( CStringW Path)
overridevirtual

Implements CAppInfo.

Definition at line 642 of file appinfo.cpp.

643{
644 return FALSE;
645}

◆ RetrieveUninstallStrings()

VOID CInstalledApplicationInfo::RetrieveUninstallStrings ( )
private

Definition at line 579 of file appinfo.cpp.

580{
581 DWORD dwWindowsInstaller = 0;
582 if (GetApplicationRegDword(L"WindowsInstaller", &dwWindowsInstaller) && dwWindowsInstaller)
583 {
584 // MSI has the same info in Uninstall / modify, so manually build it
586 }
587 else
588 {
590 }
591 DWORD dwNoModify = 0;
592 if (!GetApplicationRegDword(L"NoModify", &dwNoModify))
593 {
594 CStringW Tmp;
595 if (GetApplicationRegString(L"NoModify", Tmp))
596 {
597 dwNoModify = Tmp.GetLength() > 0 ? (Tmp[0] == '1') : 0;
598 }
599 else
600 {
601 dwNoModify = 0;
602 }
603 }
604 if (!dwNoModify)
605 {
606 if (dwWindowsInstaller)
607 {
609 }
610 else
611 {
613 }
614 }
615}
void __cdecl Format(UINT nFormatID,...)
Definition: cstringt.h:818
const CStringW szIdentifier
Definition: appinfo.h:119

Referenced by CanModify(), ShowAppInfo(), and UninstallApplication().

◆ ShowAppInfo()

VOID CInstalledApplicationInfo::ShowAppInfo ( CAppRichEdit RichEdit)
overridevirtual

Implements CAppInfo.

Definition at line 503 of file appinfo.cpp.

504{
505 RichEdit->SetText(szDisplayName, CFE_BOLD);
506 RichEdit->InsertText(L"\n", 0);
507
509 AddApplicationRegString(RichEdit, IDS_INFO_PUBLISHER, L"Publisher", 0);
510 AddApplicationRegString(RichEdit, IDS_INFO_REGOWNER, L"RegOwner", 0);
511 AddApplicationRegString(RichEdit, IDS_INFO_PRODUCTID, L"ProductID", 0);
513 AddApplicationRegString(RichEdit, IDS_INFO_HELPPHONE, L"HelpTelephone", 0);
514 AddApplicationRegString(RichEdit, IDS_INFO_README, L"Readme", 0);
515 AddApplicationRegString(RichEdit, IDS_INFO_CONTACT, L"Contact", 0);
516 AddApplicationRegString(RichEdit, IDS_INFO_UPDATEINFO, L"URLUpdateInfo", CFM_LINK);
517 AddApplicationRegString(RichEdit, IDS_INFO_INFOABOUT, L"URLInfoAbout", CFM_LINK);
519
521 {
523 }
524
526 AddApplicationRegString(RichEdit, IDS_INFO_INSTLOCATION, L"InstallLocation", 0);
527 AddApplicationRegString(RichEdit, IDS_INFO_INSTALLSRC, L"InstallSource", 0);
528
530 {
532 }
533
536}
#define IDS_INFO_INSTALLSRC
Definition: resource.h:165
#define IDS_INFO_REGOWNER
Definition: resource.h:158
#define IDS_INFO_VERSION
Definition: resource.h:152
#define IDS_INFO_HELPLINK
Definition: resource.h:155
#define IDS_INFO_INSTALLDATE
Definition: resource.h:168
#define IDS_INFO_HELPPHONE
Definition: resource.h:156
#define IDS_INFO_INSTLOCATION
Definition: resource.h:164
#define IDS_INFO_COMMENTS
Definition: resource.h:163
#define IDS_INFO_UPDATEINFO
Definition: resource.h:161
#define IDS_INFO_CONTACT
Definition: resource.h:160
#define IDS_INFO_MODIFYPATH
Definition: resource.h:167
#define IDS_INFO_UNINSTALLSTR
Definition: resource.h:166
#define IDS_INFO_PRODUCTID
Definition: resource.h:159
#define IDS_INFO_README
Definition: resource.h:157
#define IDS_INFO_PUBLISHER
Definition: resource.h:154
#define IDS_INFO_INFOABOUT
Definition: resource.h:162
VOID AddApplicationRegString(CAppRichEdit *RichEdit, UINT StringID, const CStringW &String, DWORD TextFlags)
Definition: appinfo.cpp:489
VOID InsertText(LPCWSTR lpszText, DWORD dwEffects)
Definition: crichedit.h:77
VOID SetText(LPCWSTR lpszText, DWORD dwEffects)
Definition: crichedit.h:91
#define CFE_BOLD
Definition: richedit.h:406
#define CFM_LINK
Definition: richedit.h:337

◆ UninstallApplication()

BOOL CInstalledApplicationInfo::UninstallApplication ( UninstallCommandFlags  Flags)
overridevirtual

Implements CAppInfo.

Definition at line 671 of file appinfo.cpp.

672{
674 {
675 return UninstallGenerated(*this, Flags);
676 }
677
678 BOOL bModify = Flags & UCF_MODIFY;
680 {
682 }
683
685 if ((Flags & (UCF_MODIFY | UCF_SILENT)) == UCF_SILENT)
686 {
687 DWORD msi = 0;
688 msi = GetApplicationRegDword(L"WindowsInstaller", &msi) && msi;
689 if (msi)
690 {
691 cmd += L" /qn";
692 }
693 else
694 {
695 CStringW silentcmd;
696 if (GetApplicationRegString(L"QuietUninstallString", silentcmd) && !silentcmd.IsEmpty())
697 {
698 cmd = silentcmd;
699 }
700 }
701 }
702
703 BOOL bSuccess = StartProcess(cmd, TRUE);
704
705 if (bSuccess && !bModify)
706 WriteLogMessage(EVENTLOG_SUCCESS, MSG_SUCCESS_REMOVE, szDisplayName);
707
708 return bSuccess;
709}
@ UCF_SILENT
Definition: appinfo.h:75
@ UCF_SAMEPROCESS
Definition: appinfo.h:77
@ UCF_MODIFY
Definition: appinfo.h:76
BOOL UninstallGenerated(CInstalledApplicationInfo &AppInfo, UninstallCommandFlags Flags)
Definition: geninst.cpp:842
BOOL WriteLogMessage(WORD wType, DWORD dwEventID, LPCWSTR lpMsg)
Definition: misc.cpp:323
BOOL StartProcess(const CStringW &Path, BOOL Wait)
Definition: misc.cpp:203
virtual InstallerType GetInstallerType(bool NestedType=false) const override
Definition: appinfo.cpp:660
Definition: ftp_var.h:139
#define EVENTLOG_SUCCESS
Definition: winnt_old.h:3074
_Must_inspect_result_ _In_ ULONG Flags
Definition: wsk.h:170

◆ Valid()

BOOL CInstalledApplicationInfo::Valid ( ) const
overridevirtual

Implements CAppInfo.

Definition at line 618 of file appinfo.cpp.

619{
620 return !szDisplayName.IsEmpty();
621}

Referenced by CAppDB::CreateInstalledAppByRegistryKey().

Member Data Documentation

◆ m_hKey

CRegKey CInstalledApplicationInfo::m_hKey
private

◆ m_KeyInfo

UINT CInstalledApplicationInfo::m_KeyInfo

Definition at line 227 of file appinfo.h.

Referenced by CAppDB::RemoveInstalledAppFromRegistry().

◆ m_szInstallDate

CStringW CInstalledApplicationInfo::m_szInstallDate
private

Definition at line 210 of file appinfo.h.

Referenced by RetrieveInstallDate(), and ShowAppInfo().

◆ m_szModifyString

CStringW CInstalledApplicationInfo::m_szModifyString
private

Definition at line 212 of file appinfo.h.

Referenced by CanModify(), RetrieveUninstallStrings(), ShowAppInfo(), and UninstallApplication().

◆ m_szUninstallString

CStringW CInstalledApplicationInfo::m_szUninstallString
private

Definition at line 211 of file appinfo.h.

Referenced by CanModify(), RetrieveUninstallStrings(), ShowAppInfo(), and UninstallApplication().


The documentation for this class was generated from the following files: