Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1214 lines
36 KiB

  1. //////////////////////////////////////////////////////////////////////////////////////////////
  2. //
  3. // AppEntry.cpp
  4. //
  5. // Copyright (C) 1998, 1999 Microsoft Corporation. All rights reserved.
  6. //
  7. // Abstract :
  8. //
  9. //
  10. //////////////////////////////////////////////////////////////////////////////////////////////
  11. #include <comdef.h>
  12. #include "stdafx.h"
  13. #include "AppManDispatch.h"
  14. #include "AppEntry.h"
  15. #include "AppMan.h"
  16. #include "AppManAdmin.h"
  17. #include "AppManDebug.h"
  18. //To flag as DBG_APPMANDP
  19. #ifdef DBG_MODULE
  20. #undef DBG_MODULE
  21. #endif
  22. #define DBG_MODULE DBG_APPMANDP
  23. //////////////////////////////////////////////////////////////////////////////////////////////
  24. //
  25. //////////////////////////////////////////////////////////////////////////////////////////////
  26. #define JANUARY 1
  27. #define FEBRUARY 2
  28. #define MARCH 3
  29. #define APRIL 4
  30. #define MAY 5
  31. #define JUNE 6
  32. #define JULY 7
  33. #define AUGUST 8
  34. #define SEPTEMBER 9
  35. #define OCTOBER 10
  36. #define NOVEMBER 11
  37. #define DECEMBER 12
  38. //////////////////////////////////////////////////////////////////////////////////////////////
  39. //
  40. //////////////////////////////////////////////////////////////////////////////////////////////
  41. void SystemTimeToDate(SYSTEMTIME * lpSystemTime, DATE * lpDate)
  42. {
  43. FUNCTION(" SystemTimeToDate()");
  44. DOUBLE dDouble;
  45. DWORD dwIndex;
  46. //
  47. // How many days have elapsed between 1900 and January 1 of this year.
  48. //
  49. dDouble = 1.0;
  50. dwIndex = 1900;
  51. while (dwIndex < lpSystemTime->wYear)
  52. {
  53. if (!(dwIndex % 4))
  54. {
  55. dDouble += 366.0;
  56. }
  57. else
  58. {
  59. dDouble += 365.0;
  60. }
  61. dwIndex++;
  62. }
  63. //
  64. // Is this a bicentile year
  65. //
  66. if ((!(lpSystemTime->wYear % 4))&&(MARCH <= lpSystemTime->wMonth))
  67. {
  68. dDouble += 1.0;
  69. }
  70. //
  71. // How many days have elapsed since the beginning of the year
  72. //
  73. switch(lpSystemTime->wMonth)
  74. {
  75. case 1
  76. : dDouble += 0.0;
  77. break;
  78. case 2
  79. : dDouble += 31.0;
  80. break;
  81. case 3
  82. : dDouble += 59.0;
  83. break;
  84. case 4
  85. : dDouble += 90.0;
  86. break;
  87. case 5
  88. : dDouble += 120.0;
  89. break;
  90. case 6
  91. : dDouble += 151.0;
  92. break;
  93. case 7
  94. : dDouble += 181.0;
  95. break;
  96. case 8
  97. : dDouble += 212.0;
  98. break;
  99. case 9
  100. : dDouble += 243.0;
  101. break;
  102. case 10
  103. : dDouble += 273.0;
  104. break;
  105. case 11
  106. : dDouble += 304.0;
  107. break;
  108. case 12
  109. : dDouble += 334.0;
  110. break;
  111. }
  112. //
  113. // How many days have elapsed since the beginning of the month
  114. //
  115. dDouble += ((DOUBLE)lpSystemTime->wDay) - 1.0;
  116. //
  117. // How many hours have elapsed since the beginning of the day
  118. //
  119. dDouble += ((DOUBLE) lpSystemTime->wHour) / 24;
  120. //
  121. // Save the dDouble value
  122. //
  123. *lpDate = dDouble;
  124. }
  125. //////////////////////////////////////////////////////////////////////////////////////////////
  126. //
  127. //////////////////////////////////////////////////////////////////////////////////////////////
  128. DWORD StrLen(LPCWSTR wszStr)
  129. {
  130. FUNCTION(" StrLen(LPCWSTR wszStr)");
  131. DWORD dwIndex;
  132. dwIndex = 0;
  133. while (wszStr[dwIndex] != 0)
  134. {
  135. dwIndex++;
  136. }
  137. return dwIndex;
  138. }
  139. //////////////////////////////////////////////////////////////////////////////////////////////
  140. //
  141. //////////////////////////////////////////////////////////////////////////////////////////////
  142. DWORD StrLen(BSTR strStr)
  143. {
  144. FUNCTION(" StrLen(BSTR strStr)");
  145. return SysStringLen(strStr);
  146. }
  147. //////////////////////////////////////////////////////////////////////////////////////////////
  148. //
  149. //////////////////////////////////////////////////////////////////////////////////////////////
  150. CAppEntry::CAppEntry(void)
  151. {
  152. DPFCONSTRUCTOR("CAppEntry()");
  153. m_fInitialized = FALSE;
  154. if (SUCCEEDED(CoInitialize(NULL)))
  155. {
  156. if (SUCCEEDED(CoCreateInstance(CLSID_ApplicationManager, NULL, CLSCTX_INPROC_SERVER, IID_ApplicationManager, (LPVOID *) &m_IApplicationManager)))
  157. {
  158. if (SUCCEEDED(m_IApplicationManager->CreateApplicationEntry(&m_IApplicationEntry)))
  159. {
  160. m_fInitialized = TRUE;
  161. }
  162. }
  163. }
  164. }
  165. //////////////////////////////////////////////////////////////////////////////////////////////
  166. //
  167. //////////////////////////////////////////////////////////////////////////////////////////////
  168. CAppEntry::~CAppEntry(void)
  169. {
  170. DPFDESTRUCTOR("~CAppEntry()");
  171. m_IApplicationEntry->Release();
  172. m_IApplicationManager->Release();
  173. m_fInitialized = FALSE;
  174. }
  175. //////////////////////////////////////////////////////////////////////////////////////////////
  176. //
  177. //////////////////////////////////////////////////////////////////////////////////////////////
  178. STDMETHODIMP CAppEntry::SetPropertyGUID(DWORD dwProperty, BSTR strGuid)
  179. {
  180. FUNCTION("CAppEntry::SetPropertyGUID()");
  181. HRESULT hResult = APPMAN_E_NOTINITIALIZED;
  182. GUID sGuid;
  183. //
  184. // Make sure the IApplicationManager interface was successfully instantiated
  185. //
  186. if (TRUE == m_fInitialized)
  187. {
  188. hResult = CLSIDFromString(strGuid, &sGuid);
  189. if (SUCCEEDED(hResult))
  190. {
  191. hResult = m_IApplicationEntry->SetProperty(dwProperty, &sGuid, sizeof(sGuid));
  192. }
  193. }
  194. return hResult;
  195. }
  196. //////////////////////////////////////////////////////////////////////////////////////////////
  197. //
  198. //////////////////////////////////////////////////////////////////////////////////////////////
  199. STDMETHODIMP CAppEntry::GetPropertyGUID(DWORD dwProperty, BSTR * lpstrGuid)
  200. {
  201. FUNCTION("CAppEntry::GetPropertyGUID()");
  202. HRESULT hResult = APPMAN_E_NOTINITIALIZED;
  203. OLECHAR * lpszString;
  204. GUID sGuid;
  205. //
  206. // Make sure the IApplicationManager interface was successfully instantiated
  207. //
  208. if (TRUE == m_fInitialized)
  209. {
  210. hResult = m_IApplicationEntry->GetProperty(dwProperty, &sGuid, sizeof(sGuid));
  211. if (SUCCEEDED(hResult))
  212. {
  213. hResult = StringFromCLSID(sGuid, &lpszString);
  214. if (SUCCEEDED(hResult))
  215. {
  216. *lpstrGuid = SysAllocString(lpszString);
  217. CoTaskMemFree((LPVOID) lpszString);
  218. //
  219. // Make sure *lpstrGuid is not NULL
  220. //
  221. if (NULL == *lpstrGuid)
  222. {
  223. hResult = E_OUTOFMEMORY;
  224. }
  225. }
  226. }
  227. }
  228. return hResult;
  229. }
  230. //////////////////////////////////////////////////////////////////////////////////////////////
  231. //
  232. //////////////////////////////////////////////////////////////////////////////////////////////
  233. STDMETHODIMP CAppEntry::SetPropertyDWORD(DWORD dwProperty, long lDword)
  234. {
  235. FUNCTION("CAppEntry::SetPropertyDWORD()");
  236. HRESULT hResult = APPMAN_E_NOTINITIALIZED;
  237. //
  238. // Make sure the IApplicationManager interface was successfully instantiated
  239. //
  240. if (TRUE == m_fInitialized)
  241. {
  242. hResult = m_IApplicationEntry->SetProperty(dwProperty, &lDword, sizeof(lDword));
  243. }
  244. return hResult;
  245. }
  246. //////////////////////////////////////////////////////////////////////////////////////////////
  247. //
  248. //////////////////////////////////////////////////////////////////////////////////////////////
  249. STDMETHODIMP CAppEntry::GetPropertyDWORD(DWORD dwProperty, long * lplDword)
  250. {
  251. FUNCTION("CAppEntry::GetPropertyDWORD()");
  252. HRESULT hResult = APPMAN_E_NOTINITIALIZED;
  253. //
  254. // Make sure the IApplicationManager interface was successfully instantiated
  255. //
  256. if (TRUE == m_fInitialized)
  257. {
  258. hResult = m_IApplicationEntry->GetProperty(dwProperty, lplDword, sizeof(long));
  259. }
  260. return hResult;
  261. }
  262. //////////////////////////////////////////////////////////////////////////////////////////////
  263. //
  264. //////////////////////////////////////////////////////////////////////////////////////////////
  265. STDMETHODIMP CAppEntry::SetPropertyWSTR(DWORD dwProperty, BSTR strString)
  266. {
  267. FUNCTION("CAppEntry::SetPropertyWSTR()");
  268. HRESULT hResult = APPMAN_E_NOTINITIALIZED;
  269. //
  270. // Make sure the IApplicationManager interface was successfully instantiated
  271. //
  272. if (TRUE == m_fInitialized)
  273. {
  274. hResult = m_IApplicationEntry->SetProperty(dwProperty | APP_PROPERTY_STR_UNICODE, strString, StrLen(strString) * 2);
  275. }
  276. return hResult;
  277. }
  278. //////////////////////////////////////////////////////////////////////////////////////////////
  279. //
  280. //////////////////////////////////////////////////////////////////////////////////////////////
  281. STDMETHODIMP CAppEntry::GetPropertyWSTR(DWORD dwProperty, BSTR * lpstrString)
  282. {
  283. FUNCTION("CAppEntry::GetPropertyWSTR()");
  284. HRESULT hResult = APPMAN_E_NOTINITIALIZED;
  285. OLECHAR lpszString[MAX_PATH+1];
  286. //
  287. // Make sure the IApplicationManager interface was successfully instantiated
  288. //
  289. if (TRUE == m_fInitialized)
  290. {
  291. ZeroMemory(lpszString, sizeof(lpszString));
  292. hResult = m_IApplicationEntry->GetProperty(dwProperty | APP_PROPERTY_STR_UNICODE, lpszString, sizeof(lpszString));
  293. if (SUCCEEDED(hResult))
  294. {
  295. *lpstrString = SysAllocString(lpszString);
  296. }
  297. }
  298. return hResult;
  299. }
  300. //////////////////////////////////////////////////////////////////////////////////////////////
  301. //
  302. //////////////////////////////////////////////////////////////////////////////////////////////
  303. STDMETHODIMP CAppEntry::get_Guid(BSTR * lpstrGuid)
  304. {
  305. FUNCTION("CAppEntry::get_Guid()");
  306. return GetPropertyGUID(APP_PROPERTY_GUID, lpstrGuid);
  307. }
  308. //////////////////////////////////////////////////////////////////////////////////////////////
  309. //
  310. //////////////////////////////////////////////////////////////////////////////////////////////
  311. STDMETHODIMP CAppEntry::put_Guid(BSTR strGuid)
  312. {
  313. FUNCTION("CAppEntry::put_Guid()");
  314. return SetPropertyGUID(APP_PROPERTY_GUID, strGuid);
  315. }
  316. //////////////////////////////////////////////////////////////////////////////////////////////
  317. //
  318. //////////////////////////////////////////////////////////////////////////////////////////////
  319. STDMETHODIMP CAppEntry::get_CompanyName(BSTR * lpstrCompanyName)
  320. {
  321. FUNCTION("CAppEntry::get_CompanyName()");
  322. return GetPropertyWSTR(APP_PROPERTY_COMPANYNAME, lpstrCompanyName);
  323. }
  324. //////////////////////////////////////////////////////////////////////////////////////////////
  325. //
  326. //////////////////////////////////////////////////////////////////////////////////////////////
  327. STDMETHODIMP CAppEntry::put_CompanyName(BSTR strCompanyName)
  328. {
  329. FUNCTION("CAppEntry::put_CompanyName()");
  330. return SetPropertyWSTR(APP_PROPERTY_COMPANYNAME, strCompanyName);
  331. }
  332. //////////////////////////////////////////////////////////////////////////////////////////////
  333. //
  334. //////////////////////////////////////////////////////////////////////////////////////////////
  335. STDMETHODIMP CAppEntry::get_Signature(BSTR * lpstrSignature)
  336. {
  337. FUNCTION("CAppEntry::get_Signature()");
  338. return GetPropertyWSTR(APP_PROPERTY_SIGNATURE, lpstrSignature);
  339. }
  340. //////////////////////////////////////////////////////////////////////////////////////////////
  341. //
  342. //////////////////////////////////////////////////////////////////////////////////////////////
  343. STDMETHODIMP CAppEntry::put_Signature(BSTR strSignature)
  344. {
  345. FUNCTION("CAppEntry::put_Signature()");
  346. return SetPropertyWSTR(APP_PROPERTY_SIGNATURE, strSignature);
  347. }
  348. //////////////////////////////////////////////////////////////////////////////////////////////
  349. //
  350. //////////////////////////////////////////////////////////////////////////////////////////////
  351. STDMETHODIMP CAppEntry::get_VersionString(BSTR * lpstrVersionString)
  352. {
  353. FUNCTION("CAppEntry::get_VersionString()");
  354. return GetPropertyWSTR(APP_PROPERTY_VERSIONSTRING, lpstrVersionString);
  355. }
  356. //////////////////////////////////////////////////////////////////////////////////////////////
  357. //
  358. //////////////////////////////////////////////////////////////////////////////////////////////
  359. STDMETHODIMP CAppEntry::put_VersionString(BSTR strVersionString)
  360. {
  361. FUNCTION("CAppEntry::put_VersionString()");
  362. return SetPropertyWSTR(APP_PROPERTY_VERSIONSTRING, strVersionString);
  363. }
  364. //////////////////////////////////////////////////////////////////////////////////////////////
  365. //
  366. //////////////////////////////////////////////////////////////////////////////////////////////
  367. STDMETHODIMP CAppEntry::get_LastUsedDate(DATE * lpDate)
  368. {
  369. FUNCTION("CAppEntry::get_LastUsedDate()");
  370. SYSTEMTIME sSystemTime;
  371. HRESULT hResult;
  372. hResult = m_IApplicationEntry->GetProperty(APP_PROPERTY_LASTUSEDDATE, &sSystemTime, sizeof(sSystemTime));
  373. if (SUCCEEDED(hResult))
  374. {
  375. SystemTimeToDate(&sSystemTime, lpDate);
  376. }
  377. return hResult;
  378. }
  379. //////////////////////////////////////////////////////////////////////////////////////////////
  380. //
  381. //////////////////////////////////////////////////////////////////////////////////////////////
  382. STDMETHODIMP CAppEntry::get_InstallDate(DATE * lpDate)
  383. {
  384. FUNCTION("CAppEntry::get_InstallDate()");
  385. SYSTEMTIME sSystemTime;
  386. HRESULT hResult;
  387. hResult = m_IApplicationEntry->GetProperty(APP_PROPERTY_INSTALLDATE, &sSystemTime, sizeof(sSystemTime));
  388. if (SUCCEEDED(hResult))
  389. {
  390. SystemTimeToDate(&sSystemTime, lpDate);
  391. }
  392. return hResult;
  393. }
  394. //////////////////////////////////////////////////////////////////////////////////////////////
  395. //
  396. //////////////////////////////////////////////////////////////////////////////////////////////
  397. STDMETHODIMP CAppEntry::get_Category(long * lplCategory)
  398. {
  399. FUNCTION("CAppEntry::get_Category()");
  400. return GetPropertyDWORD(APP_PROPERTY_CATEGORY, lplCategory);
  401. }
  402. //////////////////////////////////////////////////////////////////////////////////////////////
  403. //
  404. //////////////////////////////////////////////////////////////////////////////////////////////
  405. STDMETHODIMP CAppEntry::put_Category(long lCategory)
  406. {
  407. FUNCTION("CAppEntry::put_Category()");
  408. return SetPropertyDWORD(APP_PROPERTY_CATEGORY, lCategory);
  409. }
  410. //////////////////////////////////////////////////////////////////////////////////////////////
  411. //
  412. //////////////////////////////////////////////////////////////////////////////////////////////
  413. STDMETHODIMP CAppEntry::get_State(long * lplState)
  414. {
  415. FUNCTION("CAppEntry::get_State()");
  416. return GetPropertyDWORD(APP_PROPERTY_STATE, lplState);
  417. }
  418. //////////////////////////////////////////////////////////////////////////////////////////////
  419. //
  420. //////////////////////////////////////////////////////////////////////////////////////////////
  421. STDMETHODIMP CAppEntry::put_State(long lState)
  422. {
  423. FUNCTION("CAppEntry::put_State()");
  424. return SetPropertyDWORD(APP_PROPERTY_STATE, lState);
  425. }
  426. //////////////////////////////////////////////////////////////////////////////////////////////
  427. //
  428. //////////////////////////////////////////////////////////////////////////////////////////////
  429. STDMETHODIMP CAppEntry::get_SetupRootPath(BSTR * lpstrSetupRootPath)
  430. {
  431. FUNCTION("CAppEntry::get_SetupRootPath()");
  432. return GetPropertyWSTR(APP_PROPERTY_SETUPROOTPATH, lpstrSetupRootPath);
  433. }
  434. //////////////////////////////////////////////////////////////////////////////////////////////
  435. //
  436. //////////////////////////////////////////////////////////////////////////////////////////////
  437. STDMETHODIMP CAppEntry::get_ApplicationRootPath(BSTR * lpstrApplicationRootPath)
  438. {
  439. FUNCTION("CAppEntry::get_ApplicationRootPath()");
  440. return GetPropertyWSTR(APP_PROPERTY_ROOTPATH, lpstrApplicationRootPath);
  441. }
  442. //////////////////////////////////////////////////////////////////////////////////////////////
  443. //
  444. //////////////////////////////////////////////////////////////////////////////////////////////
  445. STDMETHODIMP CAppEntry::put_ApplicationRootPath(BSTR strApplicationRootPath)
  446. {
  447. FUNCTION("CAppEntry::put_ApplicationRootPath()");
  448. return SetPropertyWSTR(APP_PROPERTY_ROOTPATH, strApplicationRootPath);
  449. }
  450. //////////////////////////////////////////////////////////////////////////////////////////////
  451. //
  452. //////////////////////////////////////////////////////////////////////////////////////////////
  453. STDMETHODIMP CAppEntry::get_EstimatedInstallKilobytes(long * lplKilobytes)
  454. {
  455. FUNCTION("CAppEntry::get_EstimatedInstallKilobytes()");
  456. return GetPropertyDWORD(APP_PROPERTY_ESTIMATEDINSTALLKILOBYTES, lplKilobytes);
  457. }
  458. //////////////////////////////////////////////////////////////////////////////////////////////
  459. //
  460. //////////////////////////////////////////////////////////////////////////////////////////////
  461. STDMETHODIMP CAppEntry::put_EstimatedInstallKilobytes(long lKilobytes)
  462. {
  463. FUNCTION("CAppEntry::put_EstimatedInstallKilobytes()");
  464. return SetPropertyDWORD(APP_PROPERTY_ESTIMATEDINSTALLKILOBYTES, lKilobytes);
  465. }
  466. //////////////////////////////////////////////////////////////////////////////////////////////
  467. //
  468. //////////////////////////////////////////////////////////////////////////////////////////////
  469. STDMETHODIMP CAppEntry::get_ExecuteCmdLine(BSTR * lpstrExecuteCmdLine)
  470. {
  471. FUNCTION("CAppEntry::get_ExecuteCmdLine()");
  472. return GetPropertyWSTR(APP_PROPERTY_EXECUTECMDLINE, lpstrExecuteCmdLine);
  473. }
  474. //////////////////////////////////////////////////////////////////////////////////////////////
  475. //
  476. //////////////////////////////////////////////////////////////////////////////////////////////
  477. STDMETHODIMP CAppEntry::put_ExecuteCmdLine(BSTR strExecuteCmdLine)
  478. {
  479. FUNCTION("CAppEntry::put_ExecuteCmdLine()");
  480. return SetPropertyWSTR(APP_PROPERTY_EXECUTECMDLINE, strExecuteCmdLine);
  481. }
  482. //////////////////////////////////////////////////////////////////////////////////////////////
  483. //
  484. //////////////////////////////////////////////////////////////////////////////////////////////
  485. STDMETHODIMP CAppEntry::get_DefaultSetupExeCmdLine(BSTR * lpstrDefaultSetupExeCmdLine)
  486. {
  487. FUNCTION("CAppEntry::get_DefaultSetupExeCmdLine()");
  488. return GetPropertyWSTR(APP_PROPERTY_DEFAULTSETUPEXECMDLINE, lpstrDefaultSetupExeCmdLine);
  489. }
  490. //////////////////////////////////////////////////////////////////////////////////////////////
  491. //
  492. //////////////////////////////////////////////////////////////////////////////////////////////
  493. STDMETHODIMP CAppEntry::put_DefaultSetupExeCmdLine(BSTR strDefaultSetupExeCmdLine)
  494. {
  495. FUNCTION("CAppEntry::put_DefaultSetupExeCmdLine()");
  496. return SetPropertyWSTR(APP_PROPERTY_DEFAULTSETUPEXECMDLINE, strDefaultSetupExeCmdLine);
  497. }
  498. //////////////////////////////////////////////////////////////////////////////////////////////
  499. //
  500. //////////////////////////////////////////////////////////////////////////////////////////////
  501. STDMETHODIMP CAppEntry::get_DownsizeCmdLine(BSTR * lpstrDownsizeCmdLine)
  502. {
  503. FUNCTION("CAppEntry::get_DownsizeCmdLine()");
  504. return GetPropertyWSTR(APP_PROPERTY_DOWNSIZECMDLINE, lpstrDownsizeCmdLine);
  505. }
  506. //////////////////////////////////////////////////////////////////////////////////////////////
  507. //
  508. //////////////////////////////////////////////////////////////////////////////////////////////
  509. STDMETHODIMP CAppEntry::put_DownsizeCmdLine(BSTR strDownsizeCmdLine)
  510. {
  511. FUNCTION("CAppEntry::put_DownsizeCmdLine()");
  512. return SetPropertyWSTR(APP_PROPERTY_DOWNSIZECMDLINE, strDownsizeCmdLine);
  513. }
  514. //////////////////////////////////////////////////////////////////////////////////////////////
  515. //
  516. //////////////////////////////////////////////////////////////////////////////////////////////
  517. STDMETHODIMP CAppEntry::get_ReInstallCmdLine(BSTR * lpstrReInstallCmdLine)
  518. {
  519. FUNCTION("CAppEntry::get_ReInstallCmdLine()");
  520. return GetPropertyWSTR(APP_PROPERTY_REINSTALLCMDLINE, lpstrReInstallCmdLine);
  521. }
  522. //////////////////////////////////////////////////////////////////////////////////////////////
  523. //
  524. //////////////////////////////////////////////////////////////////////////////////////////////
  525. STDMETHODIMP CAppEntry::put_ReInstallCmdLine(BSTR strReInstallCmdLine)
  526. {
  527. FUNCTION("CAppEntry::put_ReInstallCmdLine()");
  528. return SetPropertyWSTR(APP_PROPERTY_REINSTALLCMDLINE, strReInstallCmdLine);
  529. }
  530. //////////////////////////////////////////////////////////////////////////////////////////////
  531. //
  532. //////////////////////////////////////////////////////////////////////////////////////////////
  533. STDMETHODIMP CAppEntry::get_UnInstallCmdLine(BSTR * lpstrUnInstallCmdLine)
  534. {
  535. FUNCTION("CAppEntry::get_UnInstallCmdLine()");
  536. return GetPropertyWSTR(APP_PROPERTY_UNINSTALLCMDLINE, lpstrUnInstallCmdLine);
  537. }
  538. //////////////////////////////////////////////////////////////////////////////////////////////
  539. //
  540. //////////////////////////////////////////////////////////////////////////////////////////////
  541. STDMETHODIMP CAppEntry::put_UnInstallCmdLine(BSTR strUnInstallCmdLine)
  542. {
  543. FUNCTION("CAppEntry::put_UnInstallCmdLine()");
  544. return SetPropertyWSTR(APP_PROPERTY_UNINSTALLCMDLINE, strUnInstallCmdLine);
  545. }
  546. //////////////////////////////////////////////////////////////////////////////////////////////
  547. //
  548. //////////////////////////////////////////////////////////////////////////////////////////////
  549. STDMETHODIMP CAppEntry::get_SelfTestCmdLine(BSTR * lpstrSelfTestCmdLine)
  550. {
  551. FUNCTION("CAppEntry::get_SelfTestCmdLine()");
  552. return GetPropertyWSTR(APP_PROPERTY_SELFTESTCMDLINE, lpstrSelfTestCmdLine);
  553. }
  554. //////////////////////////////////////////////////////////////////////////////////////////////
  555. //
  556. //////////////////////////////////////////////////////////////////////////////////////////////
  557. STDMETHODIMP CAppEntry::put_SelfTestCmdLine(BSTR strSelfTestCmdLine)
  558. {
  559. FUNCTION("CAppEntry::put_SelfTestCmdLine()");
  560. return SetPropertyWSTR(APP_PROPERTY_SELFTESTCMDLINE, strSelfTestCmdLine);
  561. }
  562. //////////////////////////////////////////////////////////////////////////////////////////////
  563. //
  564. //////////////////////////////////////////////////////////////////////////////////////////////
  565. STDMETHODIMP CAppEntry::get_TitleURL(BSTR * lpstrTitleURL)
  566. {
  567. FUNCTION("CAppEntry::get_TitleURL()");
  568. return GetPropertyWSTR(APP_PROPERTY_TITLEURL, lpstrTitleURL);
  569. }
  570. //////////////////////////////////////////////////////////////////////////////////////////////
  571. //
  572. //////////////////////////////////////////////////////////////////////////////////////////////
  573. STDMETHODIMP CAppEntry::put_TitleURL(BSTR strTitleURL)
  574. {
  575. FUNCTION("CAppEntry::put_TitleURL()");
  576. return SetPropertyWSTR(APP_PROPERTY_TITLEURL, strTitleURL);
  577. }
  578. //////////////////////////////////////////////////////////////////////////////////////////////
  579. //
  580. //////////////////////////////////////////////////////////////////////////////////////////////
  581. STDMETHODIMP CAppEntry::get_DeveloperURL(BSTR * lpstrDeveloperURL)
  582. {
  583. FUNCTION("CAppEntry::get_DeveloperURL()");
  584. return GetPropertyWSTR(APP_PROPERTY_DEVELOPERURL, lpstrDeveloperURL);
  585. }
  586. //////////////////////////////////////////////////////////////////////////////////////////////
  587. //
  588. //////////////////////////////////////////////////////////////////////////////////////////////
  589. STDMETHODIMP CAppEntry::put_DeveloperURL(BSTR strDeveloperURL)
  590. {
  591. FUNCTION("CAppEntry::put_DeveloperURL()");
  592. return SetPropertyWSTR(APP_PROPERTY_DEVELOPERURL, strDeveloperURL);
  593. }
  594. //////////////////////////////////////////////////////////////////////////////////////////////
  595. //
  596. //////////////////////////////////////////////////////////////////////////////////////////////
  597. STDMETHODIMP CAppEntry::get_PublisherURL(BSTR * lpstrPublisherURL)
  598. {
  599. FUNCTION("CAppEntry::get_PublisherURL()");
  600. return GetPropertyWSTR(APP_PROPERTY_PUBLISHERURL, lpstrPublisherURL);
  601. }
  602. //////////////////////////////////////////////////////////////////////////////////////////////
  603. //
  604. //////////////////////////////////////////////////////////////////////////////////////////////
  605. STDMETHODIMP CAppEntry::put_PublisherURL(BSTR strPublisherURL)
  606. {
  607. FUNCTION("CAppEntry::put_PublisherURL()");
  608. return SetPropertyWSTR(APP_PROPERTY_PUBLISHERURL, strPublisherURL);
  609. }
  610. //////////////////////////////////////////////////////////////////////////////////////////////
  611. //
  612. //////////////////////////////////////////////////////////////////////////////////////////////
  613. STDMETHODIMP CAppEntry::get_XMLInfoFile(BSTR * lpstrXMLInfoFile)
  614. {
  615. FUNCTION("CAppEntry::get_XMLInfoFile()");
  616. return GetPropertyWSTR(APP_PROPERTY_XMLINFOFILE, lpstrXMLInfoFile);
  617. }
  618. //////////////////////////////////////////////////////////////////////////////////////////////
  619. //
  620. //////////////////////////////////////////////////////////////////////////////////////////////
  621. STDMETHODIMP CAppEntry::put_XMLInfoFile(BSTR strXMLInfoFile)
  622. {
  623. FUNCTION("CAppEntry::put_XMLInfoFile()");
  624. return SetPropertyWSTR(APP_PROPERTY_XMLINFOFILE, strXMLInfoFile);
  625. }
  626. //////////////////////////////////////////////////////////////////////////////////////////////
  627. //
  628. //////////////////////////////////////////////////////////////////////////////////////////////
  629. STDMETHODIMP CAppEntry::Clear()
  630. {
  631. FUNCTION("CAppEntry::Clear()");
  632. return m_IApplicationEntry->Clear();
  633. }
  634. //////////////////////////////////////////////////////////////////////////////////////////////
  635. //
  636. //////////////////////////////////////////////////////////////////////////////////////////////
  637. STDMETHODIMP CAppEntry::InitializeInstall(void)
  638. {
  639. FUNCTION("CAppEntry::InitializeInstall()");
  640. return m_IApplicationEntry->InitializeInstall();
  641. }
  642. //////////////////////////////////////////////////////////////////////////////////////////////
  643. //
  644. //////////////////////////////////////////////////////////////////////////////////////////////
  645. STDMETHODIMP CAppEntry::FinalizeInstall(void)
  646. {
  647. FUNCTION("CAppEntry::FinalizeInstall()");
  648. return m_IApplicationEntry->FinalizeInstall();
  649. }
  650. //////////////////////////////////////////////////////////////////////////////////////////////
  651. //
  652. //////////////////////////////////////////////////////////////////////////////////////////////
  653. STDMETHODIMP CAppEntry::InitializeDownsize(void)
  654. {
  655. FUNCTION("CAppEntry::InitializeDownsize()");
  656. return m_IApplicationEntry->InitializeDownsize();
  657. }
  658. //////////////////////////////////////////////////////////////////////////////////////////////
  659. //
  660. //////////////////////////////////////////////////////////////////////////////////////////////
  661. STDMETHODIMP CAppEntry::FinalizeDownsize(void)
  662. {
  663. FUNCTION("CAppEntry::FinalizeDownsize()");
  664. return m_IApplicationEntry->FinalizeDownsize();
  665. }
  666. //////////////////////////////////////////////////////////////////////////////////////////////
  667. //
  668. //////////////////////////////////////////////////////////////////////////////////////////////
  669. STDMETHODIMP CAppEntry::InitializeReInstall(void)
  670. {
  671. FUNCTION("CAppEntry::InitializeReInstall()");
  672. return m_IApplicationEntry->InitializeReInstall();
  673. }
  674. //////////////////////////////////////////////////////////////////////////////////////////////
  675. //
  676. //////////////////////////////////////////////////////////////////////////////////////////////
  677. STDMETHODIMP CAppEntry::FinalizeReInstall(void)
  678. {
  679. FUNCTION("CAppEntry::FinalizeReInstall()");
  680. return m_IApplicationEntry->FinalizeReInstall();
  681. }
  682. //////////////////////////////////////////////////////////////////////////////////////////////
  683. //
  684. //////////////////////////////////////////////////////////////////////////////////////////////
  685. STDMETHODIMP CAppEntry::InitializeUnInstall(void)
  686. {
  687. FUNCTION("CAppEntry::InitializeUnInstall()");
  688. return m_IApplicationEntry->InitializeUnInstall();
  689. }
  690. //////////////////////////////////////////////////////////////////////////////////////////////
  691. //
  692. //////////////////////////////////////////////////////////////////////////////////////////////
  693. STDMETHODIMP CAppEntry::FinalizeUnInstall(void)
  694. {
  695. FUNCTION("CAppEntry::FinalizeUnUnInstall()");
  696. return m_IApplicationEntry->FinalizeUnInstall();
  697. }
  698. //////////////////////////////////////////////////////////////////////////////////////////////
  699. //
  700. //////////////////////////////////////////////////////////////////////////////////////////////
  701. STDMETHODIMP CAppEntry::InitializeSelfTest(void)
  702. {
  703. FUNCTION("CAppEntry::InitializeSelfTest()");
  704. return m_IApplicationEntry->InitializeSelfTest();
  705. }
  706. //////////////////////////////////////////////////////////////////////////////////////////////
  707. //
  708. //////////////////////////////////////////////////////////////////////////////////////////////
  709. STDMETHODIMP CAppEntry::FinalizeSelfTest(void)
  710. {
  711. FUNCTION("CAppEntry::FinalizeSelfTest()");
  712. return m_IApplicationEntry->FinalizeSelfTest();
  713. }
  714. //////////////////////////////////////////////////////////////////////////////////////////////
  715. //
  716. //////////////////////////////////////////////////////////////////////////////////////////////
  717. STDMETHODIMP CAppEntry::Abort(void)
  718. {
  719. FUNCTION("CAppEntry::Abort()");
  720. return m_IApplicationEntry->Abort();
  721. }
  722. //////////////////////////////////////////////////////////////////////////////////////////////
  723. //
  724. //////////////////////////////////////////////////////////////////////////////////////////////
  725. STDMETHODIMP CAppEntry::Run(long lRunFlags, BSTR strCmdLineParameters)
  726. {
  727. FUNCTION("CAppEntry::Run()");
  728. return m_IApplicationEntry->Run((const DWORD) lRunFlags, APP_PROPERTY_STR_UNICODE, (LPVOID) strCmdLineParameters, StrLen(strCmdLineParameters));
  729. }
  730. //////////////////////////////////////////////////////////////////////////////////////////////
  731. //
  732. //////////////////////////////////////////////////////////////////////////////////////////////
  733. STDMETHODIMP CAppEntry::AddAssociation(long lAssociationType, IAppEntry * lpAppEntry)
  734. {
  735. FUNCTION("CAppEntry::AddAssociation()");
  736. IApplicationEntry * lpApplicationEntry;
  737. HRESULT hResult = APPMAN_E_NOTINITIALIZED;
  738. if (TRUE == m_fInitialized)
  739. {
  740. ((CAppEntry *)lpAppEntry)->GetApplicationEntryPtr(&lpApplicationEntry);
  741. hResult = m_IApplicationEntry->AddAssociation(lAssociationType, lpApplicationEntry);
  742. }
  743. return hResult;
  744. }
  745. //////////////////////////////////////////////////////////////////////////////////////////////
  746. //
  747. //////////////////////////////////////////////////////////////////////////////////////////////
  748. STDMETHODIMP CAppEntry::RemoveAssociation(long lAssociationType, IAppEntry * lpAppEntry)
  749. {
  750. FUNCTION("CAppEntry::RemoveAssociation()");
  751. IApplicationEntry * lpApplicationEntry;
  752. HRESULT hResult = APPMAN_E_NOTINITIALIZED;
  753. if (TRUE == m_fInitialized)
  754. {
  755. ((CAppEntry *)lpAppEntry)->GetApplicationEntryPtr(&lpApplicationEntry);
  756. hResult = m_IApplicationEntry->RemoveAssociation(lAssociationType, lpApplicationEntry);
  757. }
  758. return hResult;
  759. }
  760. //////////////////////////////////////////////////////////////////////////////////////////////
  761. //
  762. //////////////////////////////////////////////////////////////////////////////////////////////
  763. STDMETHODIMP CAppEntry::EnumAssociationTypes(long lAssociationIndex, long * lAssociationType)
  764. {
  765. FUNCTION("CAppEntry::EnumAssociationTypes()");
  766. IApplicationEntry * lpApplicationEntry;
  767. HRESULT hResult = APPMAN_E_NOTINITIALIZED;
  768. if (TRUE == m_fInitialized)
  769. {
  770. hResult = m_IApplicationManager->CreateApplicationEntry(&lpApplicationEntry);
  771. if (SUCCEEDED(hResult))
  772. {
  773. hResult = m_IApplicationEntry->EnumAssociations(lAssociationIndex, (LPDWORD) lAssociationType, lpApplicationEntry);
  774. lpApplicationEntry->Release();
  775. }
  776. }
  777. return hResult;
  778. }
  779. //////////////////////////////////////////////////////////////////////////////////////////////
  780. //
  781. //////////////////////////////////////////////////////////////////////////////////////////////
  782. STDMETHODIMP CAppEntry::EnumAssociationObjects(long lAssociationIndex, IAppEntry * lpAppEntry)
  783. {
  784. FUNCTION("CAppEntry::EnumAssociationObjects()");
  785. IApplicationEntry * lpApplicationEntry;
  786. HRESULT hResult = APPMAN_E_NOTINITIALIZED;
  787. DWORD dwAssociationType;
  788. if (TRUE == m_fInitialized)
  789. {
  790. ((CAppEntry *)lpAppEntry)->GetApplicationEntryPtr(&lpApplicationEntry);
  791. hResult = m_IApplicationEntry->EnumAssociations(lAssociationIndex, &dwAssociationType, lpApplicationEntry);
  792. }
  793. return hResult;
  794. }
  795. //////////////////////////////////////////////////////////////////////////////////////////////
  796. //
  797. //////////////////////////////////////////////////////////////////////////////////////////////
  798. STDMETHODIMP CAppEntry::GetTemporarySpace(long lKilobytesRequired, BSTR * lpstrRootPath)
  799. {
  800. FUNCTION("CAppEntry::GetTemporarySpace()");
  801. HRESULT hResult = E_FAIL;
  802. OLECHAR szString[MAX_PATH+1];
  803. //
  804. // Make sure the IApplicationManager interface was successfully instantiated
  805. //
  806. if (TRUE == m_fInitialized)
  807. {
  808. ZeroMemory(szString, sizeof(szString));
  809. hResult = m_IApplicationEntry->GetTemporarySpace(lKilobytesRequired, APP_PROPERTY_STR_UNICODE, (LPVOID) szString, sizeof(szString));
  810. if (SUCCEEDED(hResult))
  811. {
  812. *lpstrRootPath = SysAllocString(szString);
  813. }
  814. }
  815. return hResult;
  816. }
  817. //////////////////////////////////////////////////////////////////////////////////////////////
  818. //
  819. //////////////////////////////////////////////////////////////////////////////////////////////
  820. STDMETHODIMP CAppEntry::RemoveTemporarySpace(BSTR strRootPath)
  821. {
  822. FUNCTION("CAppEntry::RemoveTemporarySpace()");
  823. HRESULT hResult = APPMAN_E_NOTINITIALIZED;
  824. if (TRUE == m_fInitialized)
  825. {
  826. hResult = m_IApplicationEntry->RemoveTemporarySpace(APP_PROPERTY_STR_UNICODE, (LPVOID) strRootPath, StrLen(strRootPath));
  827. }
  828. return hResult;
  829. }
  830. //////////////////////////////////////////////////////////////////////////////////////////////
  831. //
  832. //////////////////////////////////////////////////////////////////////////////////////////////
  833. STDMETHODIMP CAppEntry::EnumTemporarySpacePaths(long lTempSpaceIndex, BSTR * lpstrRootPath)
  834. {
  835. FUNCTION("CAppEntry::EnumTemporarySpacePaths()");
  836. HRESULT hResult = APPMAN_E_NOTINITIALIZED;
  837. OLECHAR szString[MAX_PATH+1];
  838. DWORD dwKilobytes;
  839. if (TRUE == m_fInitialized)
  840. {
  841. ZeroMemory(szString, sizeof(szString));
  842. hResult = m_IApplicationEntry->EnumTemporarySpaces(lTempSpaceIndex, &dwKilobytes, APP_PROPERTY_STR_UNICODE, (LPVOID) szString, sizeof(szString));
  843. if (SUCCEEDED(hResult))
  844. {
  845. *lpstrRootPath = SysAllocString(szString);
  846. }
  847. }
  848. return hResult;
  849. }
  850. //////////////////////////////////////////////////////////////////////////////////////////////
  851. //
  852. //////////////////////////////////////////////////////////////////////////////////////////////
  853. STDMETHODIMP CAppEntry::EnumTemporarySpaceAllocations(long lTempSpaceIndex, long * lTempSpaceKilobytes)
  854. {
  855. FUNCTION("CAppEntry::EnumTemporarySpaceAllocations()");
  856. HRESULT hResult = APPMAN_E_NOTINITIALIZED;
  857. OLECHAR szString[MAX_PATH+1];
  858. if (TRUE == m_fInitialized)
  859. {
  860. hResult = m_IApplicationEntry->EnumTemporarySpaces(lTempSpaceIndex, (LPDWORD) lTempSpaceKilobytes, APP_PROPERTY_STR_UNICODE, (LPVOID) szString, sizeof(szString));
  861. }
  862. return hResult;
  863. }
  864. //////////////////////////////////////////////////////////////////////////////////////////////
  865. //
  866. //////////////////////////////////////////////////////////////////////////////////////////////
  867. STDMETHODIMP CAppEntry::get_RemovableKilobytes(long * lplKilobytes)
  868. {
  869. FUNCTION("CAppEntry::get_RemovableKilobytes()");
  870. return GetPropertyDWORD(APP_PROPERTY_REMOVABLEKILOBYTES, lplKilobytes);
  871. }
  872. //////////////////////////////////////////////////////////////////////////////////////////////
  873. //
  874. //////////////////////////////////////////////////////////////////////////////////////////////
  875. STDMETHODIMP CAppEntry::put_RemovableKilobytes(long lKilobytes)
  876. {
  877. FUNCTION("CAppEntry::put_RemovableKilobytes()");
  878. return SetPropertyDWORD(APP_PROPERTY_REMOVABLEKILOBYTES, lKilobytes);
  879. }
  880. //////////////////////////////////////////////////////////////////////////////////////////////
  881. //
  882. //////////////////////////////////////////////////////////////////////////////////////////////
  883. STDMETHODIMP CAppEntry::get_NonRemovableKilobytes(long * lplKilobytes)
  884. {
  885. FUNCTION("CAppEntry::get_NonRemovableKilobytes()");
  886. return GetPropertyDWORD(APP_PROPERTY_NONREMOVABLEKILOBYTES, lplKilobytes);
  887. }
  888. //////////////////////////////////////////////////////////////////////////////////////////////
  889. //
  890. //////////////////////////////////////////////////////////////////////////////////////////////
  891. STDMETHODIMP CAppEntry::put_NonRemovableKilobytes(long lKilobytes)
  892. {
  893. FUNCTION("CAppEntry::put_NonRemovableKilobytes()");
  894. return SetPropertyDWORD(APP_PROPERTY_NONREMOVABLEKILOBYTES, lKilobytes);
  895. }
  896. //////////////////////////////////////////////////////////////////////////////////////////////
  897. //
  898. //////////////////////////////////////////////////////////////////////////////////////////////
  899. STDMETHODIMP CAppEntry::Initialize(void)
  900. {
  901. FUNCTION("CAppEntry::Initialize()");
  902. if (m_fInitialized)
  903. {
  904. return S_OK;
  905. }
  906. return E_FAIL;
  907. }
  908. //////////////////////////////////////////////////////////////////////////////////////////////
  909. //
  910. //////////////////////////////////////////////////////////////////////////////////////////////
  911. STDMETHODIMP CAppEntry::GetApplicationEntryPtr(IApplicationEntry ** lppApplicationEntry)
  912. {
  913. FUNCTION("CAppEntry::GetApplicationEntryPtr()");
  914. if (!m_fInitialized)
  915. {
  916. return E_FAIL;
  917. }
  918. *lppApplicationEntry = m_IApplicationEntry;
  919. return S_OK;
  920. }