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.

2117 lines
71 KiB

  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
  2. <HTML>
  3. <HEAD>
  4. <OBJECT ID=pchealth classid=CLSID:FC7D9E02-3F9E-11d3-93C0-00C04F72DAF7></OBJECT>
  5. <TITLE>Start Application in Compatibility Mode</TITLE>
  6. <META HTTP-EQUIV="Content-Type" CONTENT="text/html; CHARSET=windows-1252">
  7. <META HTTP-EQUIV=PICS-Label CONTENT='(PICS-1.1 "http://www.rsac.org/ratingsv01.html" l comment "RSACi North America Server" by "[email protected]" r (n 0 s 0 v 0 l 0))'>
  8. <META HTTP-EQUIV="MSThemeCompatible" CONTENT="Yes">
  9. <META content=en-us http-equiv=Content-Language>
  10. <LINK ID=Stylesheet_Ref0 href="hcp://system/css/shared.css" rel=STYLESHEET type=text/css>
  11. <LINK ID=Stylesheet_Ref1 href="hcp://system/css/Behaviors.css" rel=STYLESHEET type=text/css>
  12. <LINK ID=Stylesheet_Ref2 href="hcp://system/css/Layout.css" rel=STYLESHEET type=text/css>
  13. <SCRIPT language="javascript">
  14. <!--
  15. var g_sApplicationLocation; // folder where the app is to be found
  16. var g_sApplicationDisplayName; // display (friendly) name for an application
  17. var g_sApplication; // application to run(full path)
  18. var g_sPersistPath; // persist path for this item
  19. var g_sCompatLayer; // layer to run (string)
  20. var g_sLayerDescription;
  21. var g_sCmdLine;
  22. var g_nPage = 0; // current page
  23. var g_nPages = 10;
  24. var g_nStartPage = 0;
  25. var g_rgPages = new Array(g_nPages);
  26. var g_shell = new ActiveXObject("Wscript.Shell");
  27. var g_fso = new ActiveXObject("Scripting.FileSystemObject");
  28. var g_bProgramsPopulated = false;
  29. var g_bAppBrowseProgsInitialized = false;
  30. var g_bProgListSelect = false;
  31. var g_util = new ActiveXObject("CompatUI.Util");
  32. var g_ProgramSelectMethod; // will be
  33. var g_upload = null; // global upload object
  34. var g_UnknownLayers; // unknown layers for the item
  35. g_rgPages[0] = 'Intro';
  36. g_rgPages[1] = 'AppSelectMethod';
  37. g_rgPages[2] = 'AppProgramList';
  38. g_rgPages[3] = 'AppBrowseProgs';
  39. g_rgPages[4] = 'FixesLayers';
  40. g_rgPages[5] = 'FixesOther';
  41. g_rgPages[6] = 'Run';
  42. g_rgPages[7] = 'Update';
  43. g_rgPages[8] = 'CompatibilityData';
  44. g_rgPages[9] = 'CompleteWizard';
  45. var g_cIntroPage = 0;
  46. var g_cAppPage = 1;
  47. var g_cAppProgramListPage = 2;
  48. var g_cAppBrowseProgsPage = 3;
  49. var g_cFixesLayersPage = 4;
  50. var g_cFixesOtherPage = 5;
  51. var g_cRunPage = 6;
  52. var g_cUpdatePage = 7;
  53. var g_cCompatibilityDataPage = 8;
  54. var g_cCompleteWizardPage = 9;
  55. var g_cSelectFromList = 0;
  56. var g_cSelectRunFromCD = 1;
  57. var g_cSelectBrowse = 2;
  58. //////////////////////////////////////////////////////////////////////////////////////
  59. //
  60. // Localization
  61. //
  62. var L_strBtnBackCaption_Button = '&nbsp;&lt;&nbsp;<u>B</u>ack&nbsp;'; // this is the caption for Back button : ' < Back '
  63. var L_strBtnNextCaption_Button = '&nbsp;N<u>e</u>xt&nbsp;&gt;&nbsp;'; // this is the caption for Next button : ' Next > '
  64. var L_strBtnFinish_Button = '&nbsp;<u>F</u>inish&nbsp;'; // this is the caption for Finish button
  65. var L_strStopBtnCaption_Button = '&nbsp;Sto<u>p</u>&nbsp;';
  66. var L_strRefreshBtnCaption_Button = '&nbsp;<u>R</u>efresh&nbsp;';
  67. var L_strCancelBtnCaption_Button = '&nbsp;Cancel&nbsp;';
  68. var L_strBrowseBtnCaption_Button = 'Bro<u>w</u>se';
  69. var L_strPage2Accelerators_Text = 'RSPEB'; // Attention, localizers: this parameter should be localized and match accelerators on this page
  70. // R = Refresh S = Select P - stoP E - nExt B - Back -->
  71. // see page 2 below for Select, all the others have to match the buttons above
  72. var L_strPage3Accelerators_Text = 'YEB'; // Attention localizers: this parameter should be localized and match accelerators on this page
  73. // Y = tYpe E - nExt B - Back
  74. // except for the browse button
  75. var L_strCompatSettingsAdjusted_Text = 'You have successfully adjusted the compatibility settings for this program.';
  76. var L_strCompatSettingsNotAdjusted_Text= 'Compatibility settings were not changed for any programs.';
  77. var L_strBrowseFilter_Text = 'Program files (*.exe;*.com;*.pif;*.cmd;*.bat;*.lnk)|*.exe;*.com;*.pif;*.cmd;*.bat;*.lnk|All files (*.*)|*.*';
  78. var L_strBrowseCaption_DialogTitle = 'Please Select Application';
  79. var L_rgExcludeFiles_FileName = new Array('%ProgramFiles%\\Windows NT\\hypertrm.exe',
  80. '%programfiles%\\msn\\msncorefiles\\msn6.exe',
  81. '%programfiles%\\messenger\\msmsgs.exe');
  82. var L_strCompatModeRemovableMedia_Text = '<b>Warning:</b> &nbsp;&nbsp; Compatibility mode cannot be set on this program. &nbsp; The selected program is on the network or a removable media device.';
  83. var L_strCompatModePartOfOS_Text = '<b>Warning:</b> &nbsp;&nbsp; Compatibility Mode cannot be set on this program. &nbsp; Selected program is part of the Operating System.';
  84. var L_strCompatModeNotExe_Text = '<b>Warning:</b> &nbsp;&nbsp; Compatibility Mode cannot be set on this object. &nbsp; Selected object is not a program executable file.';
  85. var L_strFileOnTheNet_Text = '<br>Warning: this file is on removable media or on the network';
  86. var L_strNoCompatSettings_Text = 'No compatibility settings were selected.';
  87. var L_strRetryCD_Message = 'Wizard could not locate programs on your CD\nClick OK to retry, Cancel to try and locate the program manually';
  88. var L_strSpecifyValidApp_Message = 'Please specify a valid program';
  89. var L_strChooseProgram_Message = 'Please choose a program from the list';
  90. var L_strErrorUpdatingShortcut_ErrorMessage = 'Error Updating application shortcut for ';
  91. var L_strAppNotFound_ErrorMessage = 'Target Application Not Found!\n\nThe file path is invalid: ';
  92. var L_strEnsureExist_ErrorMessage = '\n\nEnsure that you have entered the full and correct path to the target application.\n';
  93. var L_strMustValid_ErrorMessage = 'The application path must point to a valid Program or Shortcut file.';
  94. var L_strErrorStartingApp_ErrorMessage = 'Error starting program:\n\n';
  95. var L_rgSetupPrograms_FileName = new Array(4); // this array contains the names of setup programs
  96. L_rgSetupPrograms_FileName[0] = 'setup.cmd'; // this array should not be touched but some more
  97. L_rgSetupPrograms_FileName[1] = 'setup.bat'; // (localized) entries may be added
  98. L_rgSetupPrograms_FileName[2] = 'setup.exe';
  99. L_rgSetupPrograms_FileName[3] = 'install.exe';
  100. ///////////////////////////////////////////////////////////////////////////////////
  101. //
  102. // Initialize global objects (compatUI)
  103. //
  104. function InitCompatUIObjects() {
  105. var BrowseProgs = document.all['BrowseProgs'];
  106. var ProgList = document.all['SelectProgs'];
  107. var sExclude = '';
  108. var i;
  109. for (i = 0; i < L_rgExcludeFiles_FileName.length; ++i) {
  110. if (i > 0) {
  111. sExclude += ';';
  112. }
  113. sExclude += L_rgExcludeFiles_FileName[i];
  114. }
  115. ProgList.ExcludeFiles = sExclude;
  116. ProgList.ExternAccel = L_strPage2Accelerators_Text;
  117. BrowseProgs.ExternAccel = L_strPage3Accelerators_Text;
  118. BrowseProgs.BrowseBtnCaption = L_strBrowseBtnCaption_Button;
  119. BrowseProgs.accessKey = GetAccessKeyFromCaption(L_strBrowseBtnCaption_Button);
  120. }
  121. function checkRadio(ctlName, choiceValue) {
  122. var collection;
  123. var i;
  124. collection = document.all[ctlName];
  125. for (i = 0; i < collection.length; i++) {
  126. if (collection[i].value.toUpperCase() == choiceValue.toUpperCase()) {
  127. collection[i].checked = true;
  128. return;
  129. }
  130. }
  131. }
  132. function getRadioText(ctlName, selValue) {
  133. var collection;
  134. var i;
  135. var lblName;
  136. var vLabel;
  137. collection = document.all[ctlName];
  138. for (i = 0; i < collection.length; i++) {
  139. if (collection[i].value.toUpperCase() == selValue.toUpperCase()) {
  140. lblName = 'lbl' + collection[i].value;
  141. vLabel = document.all[lblName];
  142. return(vLabel.innerText);
  143. }
  144. }
  145. }
  146. function getRadioValue(ctlName) {
  147. var collection;
  148. var i;
  149. collection = document.all[ctlName];
  150. for (i = 0; i < collection.length; i++) {
  151. if (collection[i].checked) {
  152. return(collection[i].value);
  153. }
  154. }
  155. }
  156. function checkCheckbox(ctlName, bCheck) {
  157. var ctl = document.all[ctlName];
  158. ctl.checked = bCheck;
  159. }
  160. function getCheckValue(ctlName) {
  161. var ctl = document.all[ctlName];
  162. if (ctl.checked == true) {
  163. return ctl.value;
  164. }
  165. return null;
  166. }
  167. function getCheckText(selValue) {
  168. var lblName = 'lbl' + selValue;
  169. var vLabel = document.all[lblName];
  170. if (vLabel != null) {
  171. return vLabel.innerText;
  172. }
  173. //
  174. // this means we have no text -- "unknown" value
  175. //
  176. return '(' + selValue + ')';
  177. }
  178. function ShowDiv(divName, bShow) {
  179. var div = document.all[divName];
  180. if (bShow) {
  181. // alert('Show ' + divName);
  182. div.style.display = '';
  183. } else {
  184. // alert('Hide ' + divName);
  185. div.style.display = 'none';
  186. }
  187. }
  188. function InitPage() {
  189. for (i = 0; i < g_rgPages.length; ++i) {
  190. ShowDiv(g_rgPages[i], g_nStartPage == i);
  191. }
  192. // init common buttons (cancel)
  193. var btnCancel = document.all('btnCancel');
  194. btnCancel.innerHTML = L_strCancelBtnCaption_Button;
  195. InitCompatUIObjects();
  196. Intro_InitPage();
  197. // init global vars - no further init
  198. }
  199. function GetAccessKeyFromCaption(sCaption) {
  200. var sUTag = '<u>';
  201. var sUCTag = '</u>';
  202. var sAccessKey = '';
  203. var sCaplc = sCaption.toLowerCase();
  204. var ixU = sCaplc.indexOf(sUTag);
  205. if (ixU < 0) {
  206. return sAccessKey;
  207. }
  208. var ixCU = sCaplc.indexOf(sUCTag, ixU);
  209. if (ixCU < 0) {
  210. return sAccessKey;
  211. }
  212. // get the string between the tags
  213. sAccessKey = sCaplc.substring(ixU + sUTag.length, ixCU);
  214. sAccessKey.toUpperCase();
  215. return sAccessKey;
  216. }
  217. function InitNavButtons(bBackEnabled, sNextButtonValue) {
  218. var frmNav = document.forms('frmNav');
  219. var btnBack = frmNav('btnBack');
  220. btnBack.innerHTML = L_strBtnBackCaption_Button;
  221. btnBack.accessKey = GetAccessKeyFromCaption(L_strBtnBackCaption_Button);
  222. btnBack.disabled = !bBackEnabled;
  223. var btnNext = frmNav('btnNext');
  224. btnNext.disabled = false;
  225. if (null != sNextButtonValue) {
  226. btnNext.innerHTML = sNextButtonValue;
  227. } else {
  228. btnNext.innerHTML = L_strBtnNextCaption_Button;
  229. }
  230. btnNext.accessKey = GetAccessKeyFromCaption(btnNext.innerHTML);
  231. btnNext.focus();
  232. }
  233. //
  234. // selected flags
  235. //
  236. var OFN_HIDEREADONLY = 0x00000004;
  237. var OFN_PATHMUSTEXIST = 0x00000800;
  238. var OFN_FILEMUSTEXIST = 0x00001000;
  239. var OFN_EXPLORER = 0x00080000; // new look commdlg
  240. var OFN_NODEREFERENCELINKS = 0x00100000; // prevents a link from being cracked
  241. var OFN_ENABLESIZING = 0x00800000;
  242. var OFN_FORCESHOWHIDDEN = 0x10000000; // Show All files including System and hidden files
  243. var g_ofnFlags = OFN_HIDEREADONLY|
  244. OFN_PATHMUSTEXIST|
  245. OFN_FILEMUSTEXIST|
  246. OFN_NODEREFERENCELINKS;
  247. //
  248. // ====================== Page Init Code ====================================
  249. //
  250. //
  251. function Intro_InitPage(nPageFrom) {
  252. InitNavButtons(false, null);
  253. }
  254. function ProgListAction() {
  255. var btnAction = document.all['btnProgListAction'];
  256. switch(btnAction.name) {
  257. case 'Cancel':
  258. CancelProgScan();
  259. break;
  260. case 'Scan':
  261. RefreshProgs();
  262. break;
  263. }
  264. }
  265. function SetProglistAction(proglistAction) {
  266. var btnAction = document.all['btnProgListAction'];
  267. btnAction.name = proglistAction;
  268. switch(proglistAction) {
  269. case 'Cancel':
  270. btnAction.innerHTML = L_strStopBtnCaption_Button;
  271. break;
  272. case 'Scan':
  273. btnAction.innerHTML = L_strRefreshBtnCaption_Button;
  274. break;
  275. }
  276. btnAction.accessKey = GetAccessKeyFromCaption(btnAction.innerHTML);
  277. }
  278. function BlockNextButton(bBlock) {
  279. var frmNav = document.forms('frmNav');
  280. var btnNext = frmNav('btnNext');
  281. var btnBack = frmNav('btnBack');
  282. if (bBlock) {
  283. btnBack.focus();
  284. }
  285. btnNext.disabled = bBlock; // bummer, next is disabled
  286. if (!bBlock) {
  287. btnNext.focus();
  288. }
  289. }
  290. function AppProgramList_InitPage(nPageFrom) {
  291. var SelectProgs = document.all['SelectProgs'];
  292. var BrowseProgs = document.all['BrowseProgs'];
  293. BrowseProgs.Enabled = false;
  294. BrowseProgs.Valid = false;
  295. SelectProgs.Enabled = true;
  296. SelectProgs.Valid = true;
  297. InitNavButtons(true, null);
  298. if (!g_bProgramsPopulated) {
  299. BlockNextButton(true);
  300. SetProglistAction('Cancel');
  301. } else {
  302. SetProglistAction('Scan');
  303. }
  304. }
  305. function CancelProgScan() {
  306. var SelectProgs = document.all['SelectProgs'];
  307. SelectProgs.CancelPopulateList();
  308. }
  309. function RefreshProgs() {
  310. var SelectProgs = document.all['SelectProgs'];
  311. var btnNext = document.all['btnNext'];
  312. BlockNextButton(true);
  313. SetProglistAction('Cancel');
  314. SelectProgs.PopulateList();
  315. }
  316. function AppBrowseProgs_InitPage(nPageFrom) {
  317. var BrowseProgs = document.all['BrowseProgs'];
  318. var oShell = new ActiveXObject('Shell.Application');
  319. // DEBUGDEBUG
  320. var SelectProgs = document.all['SelectProgs'];
  321. SelectProgs.Enabled = false;
  322. SelectProgs.Valid = false;
  323. BrowseProgs.Enabled = true;
  324. BrowseProgs.Valid = true;
  325. // localization
  326. BrowseProgs.BrowseFilter = L_strBrowseFilter_Text;
  327. BrowseProgs.BrowseFlags = g_ofnFlags;
  328. BrowseProgs.BrowseTitle = L_strBrowseCaption_DialogTitle;
  329. var shFolder = oShell.Namespace(0x2); // ssPrograms, Folder2 object
  330. BrowseProgs.BrowseInitialDirectory = shFolder.Self.Path; // convert to folder item and get path
  331. InitNavButtons(true, null);
  332. }
  333. function Page_NavigateComplete(nPageTo) {
  334. if (nPageTo == g_cAppBrowseProgsPage) {
  335. if (g_bAppBrowseProgsInitialized) {
  336. OnBrowseProgsReady();
  337. }
  338. }
  339. }
  340. function OnBrowseProgsReady() {
  341. var BrowseProgs = document.all['BrowseProgs'];
  342. BrowseProgs.focus();
  343. }
  344. function AppSelectMethod_InitPage(nPageFrom) {
  345. InitNavButtons(true, null);
  346. }
  347. function FixesLayers_InitPage(nPageFrom) {
  348. var sCompatLayer;
  349. if (nPageFrom < g_cFixesLayersPage) { // we want to find whether it is a motion forward or backwards
  350. sCompatLayer = GetApplicationLayer();
  351. ParseLayers(sCompatLayer);
  352. }
  353. var bShowLUA = g_util.CheckAdminPrivileges();
  354. var chkLUA = document.all['chkSimAdmin'];
  355. chkLUA.style.display = bShowLUA ? '' : 'none';
  356. var lblLUA = document.all['lblLUA'];
  357. lblLUA.style.display = bShowLUA ? '' : 'none';
  358. InitNavButtons(true, null);
  359. }
  360. function CompatibilityData_InitPage(nPageFrom) {
  361. ClearUploadInformation();
  362. g_upload = new ActiveXObject("CompatUI.Upload");
  363. //
  364. // prepare for an upload
  365. //
  366. PrepareUploadInformation(g_upload);
  367. InitNavButtons(true, null);
  368. //
  369. // make sure yes and no -- neither is checked
  370. //
  371. document.all['chkUploadInfo' ].checked = false;
  372. document.all['chkNoUploadInfo'].checked = false;
  373. //
  374. // disable next button for now please
  375. //
  376. BlockNextButton(true);
  377. }
  378. function ClearUploadInformation() {
  379. if (g_upload != null) {
  380. g_upload.DeleteTempFiles();
  381. delete g_upload;
  382. g_upload = null;
  383. }
  384. }
  385. function SendCompatibilityReport(bSend) {
  386. if (g_upload == null) {
  387. return;
  388. }
  389. if (bSend) {
  390. g_upload.SendReport();
  391. }
  392. ClearUploadInformation();
  393. }
  394. function ViewTempFileList() {
  395. g_upload.ShowTempFiles();
  396. }
  397. function CompleteWizard_InitPage(nPageFrom) {
  398. //
  399. // see if our app was system
  400. //
  401. var UpdateAction = getRadioValue('UpdateShortcut');
  402. var divCompatSettings = document.all['divCompatSettings'];
  403. var sSettings;
  404. if (UpdateAction == 'Yes') {
  405. sSettings = L_strCompatSettingsAdjusted_Text;
  406. } else {
  407. sSettings = L_strCompatSettingsNotAdjusted_Text;
  408. }
  409. divCompatSettings.innerHTML = sSettings;
  410. InitNavButtons(true, L_strBtnFinish_Button);
  411. var btnNext = document.all['btnNext'];
  412. btnNext.accessKey = 'F';
  413. }
  414. //
  415. // Read autorun.inf and be happy
  416. //
  417. // returns dictionary object with all the relevant information
  418. //
  419. // autorunToken may be anything that comes with autorun.xxx
  420. function ReadAutorunContent(ts, autorunToken) {
  421. var line;
  422. var re; // regexpression
  423. var rr; // result of a match
  424. var dictAutorun = null;
  425. var ReadingContent = false;
  426. while (!ts.AtEndOfStream) {
  427. line = ts.ReadLine();
  428. // look for 'open' token
  429. // parse the freaking line
  430. re = /\[\s*autorun(\.\S+){0,}\s*\]/i
  431. rr = line.match(re);
  432. if (rr != null) {
  433. // see if this is autorun.architecture
  434. if (ReadingContent) {
  435. break;
  436. }
  437. if (rr.length > 1 && autorunToken != null) {
  438. autorunToken.toLowerCase();
  439. rr[1].toLowerCase();
  440. if (rr[1] != autorunToken) {
  441. continue;
  442. }
  443. }
  444. dictAutorun = new ActiveXObject("Scripting.Dictionary");
  445. ReadingContent = true;
  446. } else if (dictAutorun != null) {
  447. re = /\s*(\w+)\s*=\s*(.+)/i
  448. rr = line.match(re);
  449. if (rr != null && rr.length >= 3 && !dictAutorun.Exists(rr[1])) {
  450. //
  451. // is this a 2 part match?
  452. //
  453. rr[1].toLowerCase();
  454. dictAutorun.Add(rr[1], rr[2]);
  455. }
  456. }
  457. }
  458. return dictAutorun;
  459. }
  460. function ReadAutorunInf(driveName) {
  461. var sAutorun = driveName + 'Autorun.inf';
  462. var f = null;
  463. var ts;
  464. var dictAutorun;
  465. var autorunToken;
  466. try {
  467. if (g_fso.FileExists(sAutorun)) {
  468. f = g_fso.GetFile(sAutorun);
  469. }
  470. } catch (e) {
  471. f = null;
  472. }
  473. if (f == null) {
  474. return null;
  475. }
  476. autorunToken = '.' + g_shell.Environment.Item('PROCESSOR_ARCHITECTURE');
  477. while(true) {
  478. ts = f.OpenAsTextStream(1); // open for reading
  479. if (ts == null) {
  480. return null;
  481. }
  482. dictAutorun = ReadAutorunContent(ts, autorunToken);
  483. ts.Close();
  484. if (dictAutorun != null) { // if we have the dictionary -- get out now
  485. return dictAutorun;
  486. }
  487. if (autorunToken != null) { // if we have tried architecture-specific item, try generic one now
  488. autorunToken = null;
  489. } else {
  490. // we have tried generic -- found nothing
  491. return null;
  492. }
  493. }
  494. return dictAutorun;
  495. }
  496. function removeParams(sPath) {
  497. var sPurePath;
  498. try {
  499. sPurePath = g_util.RemoveArgs(sPath);
  500. } catch(e) {
  501. sPurePath = sPath;
  502. }
  503. return sPurePath;
  504. }
  505. //
  506. // reads and sets globals for apphelp's benefit
  507. //
  508. //
  509. function GetAutorunInformation(driveName, dictAutorun, IsAutorun) {
  510. var sApplication = null;
  511. var sApplicationDisplayName = null;
  512. var sApplicationPath = null;
  513. var drive;
  514. if (dictAutorun.Exists('label')) {
  515. sApplicationDisplayName = dictAutorun.Item('label');
  516. }
  517. if (sApplicationDisplayName == null) {
  518. drive = g_fso.GetDrive(driveName);
  519. sApplicationDisplayName = drive.VolumeName + ' (' + driveName + ')';
  520. }
  521. if (dictAutorun.Exists('open')) {
  522. sApplication = dictAutorun.Item('open');
  523. } else {
  524. //
  525. // no open verb -- we will try this - but what do we do with this item?
  526. //
  527. if (dictAutorun.Exists('shellexecute')) {
  528. sApplication = dictAutorun.Item('shellexecute');
  529. if (sApplication != null && sApplication.length) {
  530. //
  531. // BUGBUG - remove before we ship
  532. //
  533. // This case was never found in our testing
  534. }
  535. }
  536. }
  537. // convert sApplication into a friendly name
  538. // see if sApplication has a friendly path
  539. if (sApplication == null || !sApplication.length) {
  540. return false;
  541. }
  542. //
  543. // sApplicationLocation
  544. //
  545. if (sApplication.substr(0, 2) == '\\\\') {
  546. // this is UNC, do not touch
  547. ;
  548. } else if (sApplication.substr(1, 1) == ':') {
  549. // has a drive name, do not touch
  550. ;
  551. } else if (sApplication.substr(0, 1) == '%') {
  552. // has env var in it -- do not touch
  553. ;
  554. } else if (sApplication.substr(0, 1) == '\\') {
  555. // prepend
  556. sApplication = driveName.substr(0, 2) + sApplication;
  557. } else {
  558. sApplication = driveName + sApplication;
  559. }
  560. // sanitize parameters
  561. sApplicationPath = removeParams(sApplication);
  562. //
  563. // make sure that whatever chemistry we did here -- it worked
  564. //
  565. if (!validateFile(sApplicationPath)) {
  566. return false;
  567. }
  568. if (IsAutorun) {
  569. g_sApplicationLocation = 'AutoRun (' + driveName + ')';
  570. } else {
  571. g_sApplicationLocation = 'Setup Application (' + driveName + ')';
  572. }
  573. g_sApplication = sApplication;
  574. g_sApplicationDisplayName = sApplicationDisplayName;
  575. g_sPersistPath = null;
  576. g_sCmdLine = g_sApplication;
  577. return true;
  578. }
  579. function ScanForAutorun() {
  580. var driveLetter = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
  581. var drive = null;
  582. var dictAutorun = null;
  583. var sAutorun;
  584. var bRet = false;
  585. for (i = 0; i < 26; ++i) {
  586. driveName = driveLetter.charAt(i) + ':\\';
  587. if (!g_fso.DriveExists(driveName)) {
  588. continue;
  589. }
  590. drive = g_fso.GetDrive(driveName);
  591. if (drive == null || drive.DriveType != 4 || !drive.IsReady) {
  592. continue;
  593. }
  594. dictAutorun = ReadAutorunInf(driveName);
  595. if (dictAutorun != null) {
  596. break;
  597. }
  598. }
  599. if (dictAutorun == null) {
  600. return false;
  601. }
  602. //
  603. // see what we have learnt
  604. //
  605. bRet = GetAutorunInformation(driveName, dictAutorun, true);
  606. delete dictAutorun;
  607. return bRet;
  608. }
  609. function Update_InitPage(nPageFrom) {
  610. var frmUpdate = document.forms('frmUpdate');
  611. var divMedia = document.all['MediaWarning'];
  612. var drive;
  613. var driveName;
  614. var sAppPath;
  615. var bUpdateDisabled = false;
  616. var optNoUpdate = document.all['chkNo'];
  617. sAppPath = ExpandSpecialFolders(g_sApplication);
  618. driveName = g_fso.GetDriveName(sAppPath);
  619. drive = g_fso.GetDrive(driveName);
  620. if (drive.DriveType == 1 || drive.DriveType == 3) {
  621. //
  622. // removable media or the network - disable both the check and the label
  623. //
  624. divMedia.innerHTML = L_strCompatModeRemovableMedia_Text;
  625. bUpdateDisabled = true;
  626. } else if (g_util.IsSystemTarget(g_sApplication)){
  627. divMedia.innerHTML = L_strCompatModePartOfOS_Text;
  628. bUpdateDisabled = true;
  629. } else if (!g_util.IsExecutableFile(g_sApplication)) {
  630. divMedia.innerHTML = L_strCompatModeNotExe_Text;
  631. bUpdateDisabled = true;
  632. }
  633. if (bUpdateDisabled) {
  634. optNoUpdate.checked = true;
  635. divMedia.style.display = '';
  636. }
  637. frmUpdate('chkYes').disabled = bUpdateDisabled;
  638. document.all['lblYes'].disabled = bUpdateDisabled;
  639. divMedia.style.display = bUpdateDisabled ? '' : 'none';
  640. InitNavButtons(true, null);
  641. }
  642. function Run_InitPage(nPageFrom) {
  643. var divLayer;
  644. var divApp;
  645. var shtml = '';
  646. var sAppName;
  647. divApp = document.all['divTargetApp'];
  648. divLayer = document.all['divCompatLayer'];
  649. //
  650. // what goes as an app name?
  651. //
  652. if (g_sApplicationDisplayName != null) {
  653. shtml = '<label title=\"' + g_sApplication +'\">' + g_sApplicationDisplayName + '</label>';
  654. } else {
  655. shtml = g_sApplication;
  656. }
  657. // if (g_sApplicationDisplayName != null) {
  658. // sAppName = g_sApplicationDisplayName;
  659. // } else {
  660. // sAppName = g_sApplication;
  661. // }
  662. // shtml = sAppName;
  663. // if (g_sApplicationLocation != null) {
  664. // shtml += '<br>' + g_sApplicationLocation;
  665. // }
  666. // if (g_sApplicationDisplayName != null) {
  667. // shtml += '<br>' + g_sApplication;
  668. // }
  669. divApp.innerHTML = shtml;
  670. divApp.style.display = '';
  671. // also check drive type, do warning if net or cd-r
  672. var drive;
  673. var driveName;
  674. driveName = g_fso.GetDriveName(g_sApplication);
  675. drive = g_fso.GetDrive(driveName);
  676. if (drive.DriveType == 1 || drive.DriveType == 3) {
  677. divApp.innerHTML += L_strFileOnTheNet_Text;
  678. }
  679. if (g_sLayerDescription == null || g_sLayerDescription.length == 0) {
  680. divLayer.innerHTML = L_strNoCompatSettings_Text;
  681. } else {
  682. divLayer.innerHTML = g_sLayerDescription;
  683. }
  684. InitNavButtons(true, null);
  685. }
  686. function validateFile(sFileName) {
  687. if (sFileName == null) {
  688. return false;
  689. }
  690. sPath = ExpandSpecialFolders(sFileName);
  691. // sPath = GetRealPathName(sPath);
  692. return g_fso.FileExists(sPath);
  693. }
  694. function NavigateToPage(nPage) {
  695. var frmNav = document.forms('frmNav');
  696. //
  697. // if we are moving beyond the last or before the first -- navigate to
  698. // the first page
  699. //
  700. if (nPage < 0 || nPage >= g_nPages) {
  701. nPage = 0;
  702. }
  703. if (eval('typeof(' + g_rgPages[nPage] + '_InitPage)') == 'function') {
  704. eval(g_rgPages[nPage] + '_InitPage(' + g_nPage + ')');
  705. }
  706. // show the divs
  707. ShowDiv(g_rgPages[g_nPage], false);
  708. g_nPage = nPage;
  709. ShowDiv(g_rgPages[g_nPage], true);
  710. if (eval('typeof(Page_NavigateComplete)') == 'function') {
  711. eval('Page_NavigateComplete(' + g_nPage + ')');
  712. }
  713. }
  714. function CheckForSetupProgsOnCD() {
  715. var driveLetter = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
  716. var drive = null;
  717. var dictAutorun = null;
  718. var sAutorun;
  719. var dictAutorun = null;
  720. var bRet;
  721. var i, j;
  722. var driveName;
  723. var sSetup;
  724. for (i = 0; i < 26; ++i) {
  725. driveName = driveLetter.charAt(i) + ':\\';
  726. if (!g_fso.DriveExists(driveName)) {
  727. continue;
  728. }
  729. drive = g_fso.GetDrive(driveName);
  730. if (drive == null || drive.DriveType != 4 || !drive.IsReady) {
  731. continue;
  732. }
  733. for (j = 0; j < L_rgSetupPrograms_FileName.length; j++) {
  734. sSetup = driveName + L_rgSetupPrograms_FileName[j];
  735. if (!g_fso.FileExists(sSetup)) {
  736. continue;
  737. }
  738. //
  739. // we have an install program
  740. //
  741. var dictAutorun = new ActiveXObject("Scripting.Dictionary");
  742. dictAutorun.Add('open', sSetup);
  743. bRet = GetAutorunInformation(driveName, dictAutorun, false);
  744. delete dictAutorun;
  745. if (bRet) {
  746. return true;
  747. }
  748. }
  749. }
  750. return false;
  751. }
  752. function getAppFromCD() {
  753. var bret;
  754. g_bProgListSelect = false;
  755. bret = ScanForAutorun();
  756. if (!bret) {
  757. bret = CheckForSetupProgsOnCD();
  758. }
  759. return bret;
  760. }
  761. function getBrowseProgsSel() {
  762. var BrowseProgs = document.all['BrowseProgs'];
  763. g_bProgListSelect = false;
  764. g_sApplication = BrowseProgs.FileName;
  765. g_sPersistPath = null;
  766. g_sApplicationDisplayName = null;
  767. g_sApplicationLocation = null;
  768. g_sCmdLine = g_sApplication;
  769. // now validate
  770. //
  771. return validateFile(g_sApplication);
  772. }
  773. function getProgListSel() {
  774. var SelectProgs = document.all['SelectProgs'];
  775. SelectProgs.GetSelectedItem();
  776. g_sApplicationDisplayName = SelectProgs.SelectionName;
  777. if (g_sApplicationDisplayName == null) {
  778. return false;
  779. }
  780. g_sApplicationLocation = SelectProgs.GetSelectionInformation(1); // folder
  781. g_sApplication = SelectProgs.GetSelectionInformation(4); // we will run this
  782. g_sPersistPath = SelectProgs.GetSelectionInformation(2); // path that we shall persist
  783. g_sCmdLine = SelectProgs.GetSelectionInformation(3);
  784. g_bProgListSelect = true;
  785. // validate
  786. return validateFile(g_sPersistPath);
  787. }
  788. function addLayerInfo(sCompatLayer) {
  789. if (g_sCompatLayer.length) {
  790. g_sCompatLayer += ' ';
  791. }
  792. g_sCompatLayer += sCompatLayer;
  793. if (g_sLayerDescription.length) {
  794. g_sLayerDescription += '<br>';
  795. }
  796. g_sLayerDescription += getCheckText(sCompatLayer);
  797. }
  798. function getLayerSelection() {
  799. g_sCompatLayer = '';
  800. g_sLayerDescription = '';
  801. var sRadioLayer = 'layer';
  802. var sCompatLayer;
  803. //
  804. // emulation mode
  805. //
  806. sCompatLayer = getRadioValue(sRadioLayer);
  807. if (sCompatLayer != 'None') {
  808. g_sCompatLayer = sCompatLayer;
  809. g_sLayerDescription = getRadioText(sRadioLayer, g_sCompatLayer);
  810. }
  811. sCompatLayer = getCheckValue('chk256color');
  812. if (sCompatLayer != null) {
  813. addLayerInfo(sCompatLayer);
  814. }
  815. sCompatLayer = getCheckValue('chk640x480');
  816. if (sCompatLayer != null) {
  817. addLayerInfo(sCompatLayer);
  818. }
  819. sCompatLayer = getCheckValue('chkNoThemes');
  820. if (sCompatLayer != null) {
  821. addLayerInfo(sCompatLayer);
  822. }
  823. sCompatLayer = getCheckValue('chkSimAdmin');
  824. if (sCompatLayer != null) {
  825. addLayerInfo(sCompatLayer);
  826. }
  827. if (g_UnknownLayers.length) {
  828. addLayerInfo(g_UnknownLayers);
  829. }
  830. // alert(g_sCompatLayer + '\n' + g_sLayerDescription);
  831. return (g_sCompatLayer.length > 0);
  832. }
  833. function onBtnNext() {
  834. var frmNav = document.forms('frmNav');
  835. // cancel calling action
  836. if (event != null) {
  837. event.returnValue = false;
  838. }
  839. var nPage = g_nPage + 1;
  840. // do what we need to do for this page
  841. switch(g_nPage) {
  842. case g_cIntroPage:
  843. break; // nothing to do for the first page
  844. case g_cAppPage: // App page -- extract application choice
  845. var prog = getRadioValue('progClass');
  846. switch(prog) {
  847. case 'CDProg':
  848. //
  849. // run program from CDROM
  850. //
  851. var bFound;
  852. var bRetry;
  853. do {
  854. bRetry = false;
  855. bFound = getAppFromCD();
  856. if (!bFound) {
  857. bRetry = confirm(L_strRetryCD_Message);
  858. }
  859. } while(bRetry);
  860. if (bFound) {
  861. nPage = g_cFixesLayersPage;
  862. g_ProgramSelectMethod = g_cSelectRunFromCD;
  863. } else {
  864. nPage = g_cAppBrowseProgsPage;
  865. g_ProgramSelectMethod = g_cSelectBrowse;
  866. }
  867. break;
  868. case 'ProgList':
  869. //
  870. // choose the program from the list
  871. //
  872. nPage = g_cAppProgramListPage;
  873. g_ProgramSelectMethod = g_cSelectFromList;
  874. break;
  875. case 'BrowseProg':
  876. nPage = g_cAppBrowseProgsPage;
  877. g_ProgramSelectMethod = g_cSelectBrowse;
  878. break;
  879. }
  880. break;
  881. case g_cAppProgramListPage:
  882. // have we chosen anything here?
  883. //
  884. if (!getProgListSel()) {
  885. alert(L_strChooseProgram_Message);
  886. return;
  887. }
  888. nPage = g_cFixesLayersPage;
  889. break;
  890. case g_cAppBrowseProgsPage:
  891. //
  892. // validate
  893. //
  894. if (!getBrowseProgsSel()) {
  895. alert(L_strSpecifyValidApp_Message);
  896. return;
  897. }
  898. nPage = g_cFixesLayersPage;
  899. break;
  900. case g_cFixesLayersPage: // nothing to do here
  901. break;
  902. case g_cFixesOtherPage: //
  903. getLayerSelection();
  904. break;
  905. case g_cRunPage: // run page (separate button for run, nothing to do here)
  906. // clicked "Next" on run page, run the app
  907. if (!RunApp()) {
  908. switch(g_ProgramSelectMethod) {
  909. case g_cSelectFromList:
  910. nPage = g_cAppProgramListPage;
  911. break;
  912. case g_cSelectBrowse:
  913. nPage = g_cAppBrowseProgsPage;
  914. break;
  915. case g_cSelectRunFromCD:
  916. nPage = g_cAppPage;
  917. break;
  918. }
  919. }
  920. break;
  921. case g_cUpdatePage: // update page
  922. //
  923. //
  924. //
  925. var UpdateAction = getRadioValue('UpdateShortcut');
  926. switch(UpdateAction) {
  927. case 'Yes':
  928. bSuccess = UpdateAppShortcut(true, null);
  929. break;
  930. case 'No':
  931. break;
  932. default:
  933. nPage = g_cFixesLayersPage;
  934. break;
  935. }
  936. //
  937. // we go to the compat report only if this is not a system target ??
  938. //
  939. if (nPage == g_cCompatibilityDataPage) {
  940. if (g_util.IsSystemTarget(g_sApplication) || !g_util.IsExecutableFile(g_sApplication)) {
  941. nPage = g_cCompleteWizardPage;
  942. }
  943. }
  944. break;
  945. case g_cCompatibilityDataPage:
  946. //
  947. // compat data page - send report now
  948. //
  949. var SendReport = getRadioValue("UploadInfo");
  950. SendCompatibilityReport(SendReport == 'Yes');
  951. break;
  952. case g_cCompleteWizardPage:
  953. //
  954. // on complete wizard
  955. //
  956. CompleteWizard();
  957. nPage = g_cCompleteWizardPage; // no way we're moving
  958. break;
  959. }
  960. //
  961. // this also sets the global g_nPage to the right page number
  962. //
  963. NavigateToPage(nPage);
  964. }
  965. function PrepareUploadInformation(oUpload) {
  966. var UpdateAction = getRadioValue('UpdateShortcut');
  967. var bCompatSuccess = (UpdateAction == 'Yes');
  968. var sAppDisplayName;
  969. var sCmd;
  970. var lMediaType = 0; // unknown
  971. sAppDisplayName = g_sApplicationDisplayName;
  972. if (g_sApplicationDisplayName == null || !g_sApplicationDisplayName.length) {
  973. sAppDisplayName = g_sApplication;
  974. }
  975. //
  976. // check whether we have a command line (this should be cracked)
  977. //
  978. sCmd = g_util.GetExePathFromObject(g_sApplication);
  979. if (sCmd == null) {
  980. sCmd = g_sApplication;
  981. }
  982. //
  983. // obtain drive type
  984. //
  985. var driveName = g_fso.GetDriveName(sCmd);
  986. if (driveName != null) {
  987. var oDrive = g_fso.GetDrive(driveName);
  988. if (oDrive != null) {
  989. lMediaType = oDrive.DriveType;
  990. }
  991. }
  992. //
  993. // ===== Upload UI =====
  994. //
  995. var sErrorText;
  996. // var sErrorDetail;
  997. // var sPlea;
  998. // localization for this is not needed (no ui)
  999. //
  1000. sErrorText = 'This report contains information about the compatibility settings ' +
  1001. 'you tried and whether these settings resolved the problem.'
  1002. // sErrorDetail = sErrorText;
  1003. // sPlea = 'If you send this report to Microsoft, it will help improve future program compatibility. ';
  1004. // sPlea += 'The report will be anonymous and confidential.'
  1005. //
  1006. // Internal Microsoft Site
  1007. // BUGBUG remove before we SHIP
  1008. //
  1009. // oUpload.SetKey ('Server', 'officewatson');
  1010. //
  1011. oUpload.SetKey ('Server', 'watson.microsoft.com');
  1012. oUpload.SetKey ('Stage1URL', '/StageOne');
  1013. oUpload.SetKey ('Stage2URL', '/dw/AppCompatTwo.asp');
  1014. oUpload.SetKey ('TitleName', 'Program Compatibility Report');
  1015. oUpload.SetKey ('Brand', 'SYSTEMRESTORE');
  1016. oUpload.SetKey ('ErrorText', sErrorText);
  1017. oUpload.SetKey ('HeaderText', 'A Program Compatibility Report has been created');
  1018. oUpload.SetKey ('UI LCID', '1033');
  1019. // oUpload.SetKey ('ErrorDetail', sErrorDetail);
  1020. // oUpload.SetKey ('ErrorSig', 'Program Compatibility Wizard: ' + (bCompatSuccess ? 'Success' : 'Failure'));
  1021. // oUpload.SetKey ('Caption', 'Program Compatibility Report');
  1022. // oUpload.SetKey ('Plea', sPlea);
  1023. //
  1024. // ===== Text on buttons =====
  1025. //
  1026. // oUpload.SetKey ('ReportButton', '&Send Report');
  1027. // oUpload.SetKey ('NoReportButton', '&Don\'t Send');
  1028. // oUpload.SetKey ('Reportee', 'Microsoft');
  1029. // use the flags below to go headless
  1030. var fDwFlags = 0x80;
  1031. // var fdwFlags = 0x40;
  1032. oUpload.SetKey ('Flags', fDwFlags);
  1033. // alert('Display name:' + sAppDisplayName + ' cmd: ' + sCmd + ' media: ' + lMediaType + ' success : ' + bCompatSuccess + ' Layer: ' + g_sCompatLayer);
  1034. var bSuccessGeneralInfo = oUpload.AddDescriptionFile(sAppDisplayName,
  1035. sCmd, // actual command that we ran
  1036. lMediaType,
  1037. bCompatSuccess,
  1038. g_sCompatLayer);
  1039. var bSuccessMatchingInfo = oUpload.AddMatchingInfo(g_sApplication);
  1040. var bSuccessManifest = oUpload.CreateManifestFile();
  1041. return (bSuccessMatchingInfo && bSuccessManifest && bSuccessGeneralInfo);
  1042. }
  1043. function CompleteWizard() {
  1044. pchealth.close();
  1045. }
  1046. function onBtnBack() {
  1047. var nPage = g_nPage - 1;
  1048. //
  1049. // check the page we're going back from
  1050. //
  1051. if (event != null) {
  1052. event.returnValue = false;
  1053. }
  1054. switch(g_nPage) {
  1055. case g_cFixesLayersPage:
  1056. switch(g_ProgramSelectMethod) {
  1057. case g_cSelectFromList:
  1058. nPage = g_cAppProgramListPage;
  1059. break;
  1060. case g_cSelectRunFromCD:
  1061. nPage = g_cAppPage;
  1062. break;
  1063. case g_cSelectBrowse:
  1064. nPage = g_cAppBrowseProgsPage;
  1065. break;
  1066. }
  1067. break;
  1068. case g_cAppBrowseProgsPage:
  1069. nPage = g_cAppPage;
  1070. break;
  1071. case g_cCompatibilityDataPage:
  1072. // if we are on a data page -- we have gathered some info
  1073. // clear it if so
  1074. ClearUploadInformation();
  1075. break;
  1076. case g_cCompleteWizardPage:
  1077. nPage = g_cUpdatePage;
  1078. break;
  1079. }
  1080. NavigateToPage(nPage);
  1081. }
  1082. function onBtnCancel() {
  1083. if (event != null) {
  1084. event.returnValue = false;
  1085. }
  1086. ClearUploadInformation();
  1087. pchealth.close();
  1088. }
  1089. function ExpandSpecialFolders(sPath) {
  1090. var Path = sPath;
  1091. Path = Path.replace(/%WINDIR%/gi, g_fso.GetSpecialFolder(0));
  1092. Path = Path.replace(/%SYSTEM%/gi, g_fso.GetSpecialFolder(1));
  1093. Path = Path.replace(/%TEMP%/gi, g_fso.GetSpecialFolder(2));
  1094. return(Path);
  1095. }
  1096. function IsDriveReady(sAppPath) {
  1097. var driveName;
  1098. var drive;
  1099. driveName = g_fso.GetDriveName(sAppPath);
  1100. if (!g_fso.DriveExists(driveName)) {
  1101. return false;
  1102. }
  1103. drive = g_fso.GetDrive(driveName);
  1104. if (drive == null || !drive.IsReady) {
  1105. return false;
  1106. }
  1107. return true;
  1108. }
  1109. function RunApp() {
  1110. var CompatLayer = g_sCompatLayer;
  1111. var TargetApp = g_sApplication;
  1112. var AppPath = ExpandSpecialFolders(TargetApp);
  1113. var sLayerSave;
  1114. var Result;
  1115. var bSuccess = false;
  1116. var AppName = removeParams(AppPath);
  1117. //
  1118. // Verify target file path
  1119. //
  1120. if (!IsDriveReady(AppName) || !g_fso.FileExists(AppName)) {
  1121. alert(L_strAppNotFound_ErrorMessage + AppName + L_strEnsureExist_ErrorMessage + L_strMustValid_ErrorMessage);
  1122. return false;
  1123. }
  1124. //
  1125. // get the layers associated with this guy
  1126. //
  1127. sLayerSave = GetApplicationLayer();
  1128. try {
  1129. if (sLayerSave != null) {
  1130. // alert(sLayerSave);
  1131. UpdateAppShortcut(false, null);
  1132. }
  1133. //
  1134. // run
  1135. //
  1136. Result = g_util.RunApplication(CompatLayer,
  1137. AppPath,
  1138. false); // enable log
  1139. bSuccess = (Result == 0);
  1140. } catch(e) {
  1141. }
  1142. if (sLayerSave != null) {
  1143. UpdateAppShortcut(true, sLayerSave);
  1144. }
  1145. if (!bSuccess) {
  1146. alert(L_strErrorStartingApp_ErrorMessage + AppPath);
  1147. }
  1148. return bSuccess;
  1149. }
  1150. function GetRealPathName(lpszPath) {
  1151. var AppPath;
  1152. AppPath = g_util.GetExePathFromObject(lpszPath);
  1153. if (AppPath == null) {
  1154. AppPath = lpszPath;
  1155. }
  1156. return AppPath;
  1157. }
  1158. function GetApplicationLayer() {
  1159. var CompatLayer = g_sCompatLayer;
  1160. var TargetApp;
  1161. var AppPath;
  1162. if (g_sPersistPath != null) {
  1163. TargetApp = g_sPersistPath;
  1164. } else {
  1165. AppPath = ExpandSpecialFolders(g_sApplication);
  1166. TargetApp = GetRealPathName(AppPath);
  1167. }
  1168. try {
  1169. CompatLayer = g_util.GetItemKeys(TargetApp);
  1170. } catch(e) {
  1171. CompatLayer = null;
  1172. }
  1173. return CompatLayer;
  1174. }
  1175. function ParseLayers(sCompatLayer) {
  1176. //
  1177. // parse the freakin string
  1178. //
  1179. // alert('parse');
  1180. checkRadio ('layer', 'None');
  1181. checkCheckbox('chk256color', false);
  1182. checkCheckbox('chk640x480', false);
  1183. checkCheckbox('chkNoThemes', false);
  1184. checkCheckbox('chkSimAdmin', false);
  1185. g_UnknownLayers = '';
  1186. if (sCompatLayer == null) {
  1187. return;
  1188. }
  1189. var re = /\s+/i
  1190. var tokens = sCompatLayer.split(re);
  1191. var i;
  1192. for (i = 0; i < tokens.length; ++i) {
  1193. tok = tokens[i].toUpperCase();
  1194. switch(tok) {
  1195. case 'WIN2000':
  1196. case 'WIN95':
  1197. case 'NT4SP5':
  1198. case 'WIN98':
  1199. case 'WIN2000':
  1200. // this item is a check-me shim
  1201. checkRadio('layer', tok);
  1202. break;
  1203. case '256COLOR':
  1204. checkCheckbox('chk256color', true);
  1205. break;
  1206. case '640X480':
  1207. checkCheckbox('chk640x480', true);
  1208. break;
  1209. case 'DISABLETHEMES':
  1210. checkCheckbox('chkNoThemes', true);
  1211. break;
  1212. case 'LUA':
  1213. checkCheckbox('chkSimAdmin', true);
  1214. break;
  1215. default:
  1216. if (g_UnknownLayers.length > 0) {
  1217. g_UnknownLayers += ' ';
  1218. }
  1219. g_UnknownLayers += tok;
  1220. break;
  1221. }
  1222. }
  1223. }
  1224. function UpdateAppShortcut(bStore, sCompatLayer) {
  1225. var CompatLayer;
  1226. var TargetApp;
  1227. var AppPath;
  1228. var bSuccess;
  1229. if (!bStore) {
  1230. CompatLayer = null;
  1231. } else {
  1232. if (sCompatLayer == null) {
  1233. if (g_sCompatLayer == null || !g_sCompatLayer.length) {
  1234. CompatLayer = null;
  1235. } else {
  1236. CompatLayer = g_sCompatLayer;
  1237. }
  1238. } else {
  1239. CompatLayer = sCompatLayer;
  1240. }
  1241. }
  1242. if (g_sPersistPath != null) {
  1243. TargetApp = g_sPersistPath;
  1244. } else {
  1245. AppPath = ExpandSpecialFolders(g_sApplication);
  1246. TargetApp = GetRealPathName(AppPath);
  1247. }
  1248. try {
  1249. bSuccess = g_util.SetItemKeys(TargetApp, CompatLayer);
  1250. } catch(e) {
  1251. bSuccess = false;
  1252. }
  1253. //
  1254. // alert('setting ' + TargetApp + ' to ' + CompatLayer);
  1255. //
  1256. var SelectProgs = document.all['SelectProgs'];
  1257. // alert('line: ' + g_sCmdLine);
  1258. if (g_sCmdLine != null && g_sCmdLine.length != 0) {
  1259. SelectProgs.UpdateListItem(g_sCmdLine, CompatLayer);
  1260. }
  1261. if (!bSuccess) {
  1262. alert(L_strErrorUpdatingShortcut_ErrorMessage + TargetApp);
  1263. }
  1264. return bSuccess;
  1265. }
  1266. function EnableNext() {
  1267. BlockNextButton(false);
  1268. }
  1269. function onRadioDblClick() {
  1270. onBtnNext();
  1271. }
  1272. function SelectProgs_DblClk(lFlags) {
  1273. //
  1274. // retrieve selection, move on to the next page
  1275. //
  1276. onBtnNext();
  1277. return 0;
  1278. }
  1279. function BrowseProgs_SelectionComplete() {
  1280. //
  1281. // retrieve selection, move on to the next page
  1282. //
  1283. onBtnNext();
  1284. return 0;
  1285. }
  1286. function SelectProgs_ProgramListReady() {
  1287. var btnNext = document.all['btnNext'];
  1288. var progList = document.all['SelectProgs'];
  1289. if (g_nPage == g_cAppProgramListPage) {
  1290. btnNext.disabled = false;
  1291. progList.focus();
  1292. }
  1293. SetProglistAction('Scan');
  1294. g_bProgramsPopulated = true;
  1295. }
  1296. //-->
  1297. </SCRIPT>
  1298. <SCRIPT LANGUAGE=javascript FOR=BrowseProgs EVENT="SelectionComplete()">
  1299. <!--
  1300. BrowseProgs_SelectionComplete();
  1301. //-->
  1302. </SCRIPT>
  1303. <SCRIPT LANGUAGE=javascript FOR=BrowseProgs EVENT="StateChanged(lState)">
  1304. <!--
  1305. // handle state changed for the control
  1306. if (lState == -5) {
  1307. OnBrowseProgsReady();
  1308. g_bAppBrowseProgsInitialized = true;
  1309. }
  1310. //-->
  1311. </SCRIPT>
  1312. <SCRIPT LANGUAGE=javascript FOR=SelectProgs EVENT="DblClk(lFlags)">
  1313. <!--
  1314. SelectProgs_DblClk(lFlags);
  1315. //-->
  1316. </SCRIPT>
  1317. <SCRIPT LANGUAGE=javascript FOR=SelectProgs EVENT="ProgramListReady()">
  1318. <!--
  1319. SelectProgs_ProgramListReady();
  1320. //-->
  1321. </SCRIPT>
  1322. </head>
  1323. <body onLoad="javascript:InitPage()" style="margin-top:2em; margin-left:22px; margin-right:22px">
  1324. <!-- header -->
  1325. <table border=0 cellpadding=0 cellspacing=0 height=100% width=100% style="margin-top:0; margin-bottom:0">
  1326. <tr style="margin-bottom:0em; margin-top:0em">
  1327. <td>
  1328. <div id=loc00 class="sys-font-heading3 sys-rhp-color-title" style="margin-bottom:1em; margin-top:0em">
  1329. Program Compatibility Wizard
  1330. </div>
  1331. </td>
  1332. </tr>
  1333. <tr valign=top height=100%>
  1334. <td>
  1335. <!-- Page 0 - Intro -->
  1336. <Div id=Intro style="height:100%; margin-top:0em; margin-bottom:0em">
  1337. <form name=frmIntro onSubmit='javascript:onBtnNext()' method=post action="">
  1338. <table border=0 cellspacing=0 cellpadding=0 height=100% style="margin-top:0; margin-bottom:0">
  1339. <tr valign=top>
  1340. <td>
  1341. <Div style="height:90%; overflow-y:auto">
  1342. <Div id=loc01 class="sys-font-body-bold sys-color-body" style="margin-bottom:1em; margin-top:0em">
  1343. <b>Welcome to the Program Compatibility Wizard</b>
  1344. </Div>
  1345. <Div id=loc02 class="sys-font-body sys-color-body" style="margin-bottom:2em; margin-top:0em">
  1346. If you are experiencing problems with a program that worked
  1347. correctly on an earlier version of Windows, this wizard helps you
  1348. select and test compatibility settings that may fix those problems.
  1349. </Div>
  1350. <Div id=loc03 class="sys-font-body sys-color-body" style="margin-top:0em">
  1351. <b>Caution:</b> It is recommended that you do not use this wizard for older
  1352. virus detection, backup, or system programs.
  1353. </Div>
  1354. </Div>
  1355. </td>
  1356. </tr>
  1357. <tr style="height:2.5em">
  1358. <td>
  1359. <Div id=loc04 class="sys-font-body sys-color-body" style="vertical-align:bottom; margin-bottom:1em">
  1360. To continue, click Next.
  1361. </Div>
  1362. </td>
  1363. </tr>
  1364. </table>
  1365. </form>
  1366. </Div>
  1367. <!-- Page 1 - App -->
  1368. <DIV id=AppSelectMethod style="height:100%; display:none; overflow-y:auto">
  1369. <form name="frmApp" method="post" onsubmit='javascript:onBtnNext()' enctype="multipart/form-data" action="">
  1370. <TABLE border=0 cellspacing=0 cellpadding=0 width=100%>
  1371. <TR>
  1372. <TD>
  1373. <Div id=loc11 class="sys-font-body-bold sys-color-body" style="margin-bottom:1em; margin-top:0em">
  1374. <b>How do you want to locate the program that you
  1375. would like to run with compatibility settings?</b>
  1376. </Div>
  1377. <Div class="sys-font-body sys-color-body" style="margin-left:0; margin-bottom:1em; margin-top:0em">
  1378. <INPUT CHECKED name=progClass type=radio value=ProgList id=chkProgList ondblclick="javascript:onRadioDblClick()">
  1379. <label id=lblProgList for=chkProgList title="Choose a program from the list" ondblclick="javascript:onRadioDblClick()"
  1380. ACCESSKEY="h">
  1381. I want to c<u>h</u>oose from a list of programs
  1382. </label>
  1383. </Div>
  1384. <Div class="sys-font-body sys-color-body" style="margin-bottom:1em; margin-top:0em">
  1385. <INPUT name=progClass type=radio value=CDProg id=chkCDProg ondblclick="javascript:onRadioDblClick()">
  1386. <label id=lblCDProg for=chkCDProg title="I want to use the program in the CD-ROM drive" ondblclick="javascript:onRadioDblClick()"
  1387. ACCESSKEY="u">
  1388. I want to <u>u</u>se the program in the CD-ROM drive
  1389. </label>
  1390. </Div>
  1391. <Div class="sys-font-body sys-color-body" style="margin-bottom:1em; margin-top:0em">
  1392. <INPUT name=progClass type=radio value=BrowseProg id=chkBrowseProg ondblclick="javascript:onRadioDblClick()">
  1393. <label id=lblBrowseProg for=chkBrowseProg title="Browse for the application" ondblclick="javascript:onRadioDblClick()"
  1394. ACCESSKEY="a">
  1395. I want to loc<u>a</u>te the program manually
  1396. </label>
  1397. </Div>
  1398. </TD>
  1399. </TR>
  1400. </TABLE>
  1401. </form>
  1402. </DIV>
  1403. <!-- Page 2 - AppProgramList -->
  1404. <DIV id=AppProgramList style="display:none; height:100%; margin-top:0em; margin-bottom:0em">
  1405. <form name="frmAppProgramList" method="post" onsubmit='javascript:onBtnNext()' enctype="multipart/form-data" action="">
  1406. <TABLE border=0 cellspacing=0 cellpadding=0 width=100% height=100% style="margin-top:0; margin-bottom:0">
  1407. <TR valign=top>
  1408. <TD>
  1409. <Div style="height:90%; overflow-y:auto">
  1410. <Div id=loc21 class="sys-font-body-bold sys-color-body" style="margin-top:0; margin-bottom:1em">
  1411. <b>Which program do you want to run with compatibility settings?</b>
  1412. </Div>
  1413. <Div class="sys-font-body sys-color-body" style="margin-top:0; margin-bottom:0em">
  1414. <label id=lblSelectProgs for=SelectProgs title="Select a program"
  1415. ACCESSKEY="S">
  1416. <u>S</u>elect a program:
  1417. </label>
  1418. <div class="sys-font-body sys-color-body" style="margin-top:0.25em; margin-bottom:0em"></div>
  1419. <!-- No accesskey is needed for this object tag - it is complimentary (from the label) -->
  1420. <OBJECT ID=SelectProgs classid=CLSID:B9B7D40C-0C41-4EAF-B0B5-6B41378C7F48 width="100%" height="80%">
  1421. </OBJECT>
  1422. </Div>
  1423. </Div>
  1424. </TD>
  1425. </TR>
  1426. <tr style="height:3em">
  1427. <td>
  1428. <Div id=divProgListAction class="sys-font-body sys-color-body" style="margin-bottom:1em; margin-top:0em">
  1429. <BUTTON value="Action" onclick="javascript:ProgListAction()"
  1430. id=btnProgListAction
  1431. style="width:6em; margin-left:0em; margin-top:0em; margin-bottom:0.5em">
  1432. </BUTTON>
  1433. </Div>
  1434. </td>
  1435. </tr>
  1436. </TABLE>
  1437. </form>
  1438. </DIV>
  1439. <!-- Page 3 - AppBrowseProgs -->
  1440. <DIV id=AppBrowseProgs style="display:none; height=100%; overflow-y:auto">
  1441. <form name="frmAppBrowseProgs" method="post" onsubmit='javascript:onBtnNext()' enctype="multipart/form-data" action="">
  1442. <TABLE border=0 cellspacing=0 cellpadding=0 width=100%>
  1443. <TR>
  1444. <TD valign="top">
  1445. <Div id=loc31 class="sys-font-body-bold sys-color-body" style="margin-top:0; margin-bottom:1em">
  1446. <b>Which program do you want to run with compatibility settings?</b>
  1447. </Div>
  1448. <Div class="sys-font-body sys-color-body" style="margin-top:0; margin-bottom:1em">
  1449. <label id=lblBrowseProgs for=BrowseProgs
  1450. titile="Type the path to the program shortcut or executable file"
  1451. ACCESSKEY="Y">
  1452. T<U>y</U>pe the path to the program shortcut or executable file:
  1453. </label>
  1454. <div class="sys-font-body sys-color-body" style="margin-top:0.25em; margin-bottom:0em"></div>
  1455. <!-- note that the accesskey for the control should match all the accelerators defined in that control
  1456. parameter Accel should be set to match ACCESSKEY
  1457. -->
  1458. <OBJECT ID=BrowseProgs classid=CLSID:66CBC149-A49F-48F9-B17A-6A3EA9B42A87 width="100%" height="30">
  1459. </OBJECT>
  1460. </Div>
  1461. </TD>
  1462. </TR>
  1463. </TBODY>
  1464. </TABLE>
  1465. </form>
  1466. </DIV>
  1467. <!-- Page 4 - FixesLayers -->
  1468. <DIV id=FixesLayers style="display:none; height:100%; overflow-y:auto">
  1469. <form name="frmFixesLayers" method="post" onsubmit='javascript:onBtnNext()' enctype="multipart/form-data" action="">
  1470. <TABLE border=0 cellspacing=0 cellpadding=0 width=100%>
  1471. <TR>
  1472. <TD valign="top">
  1473. <Div id=loc41 class="sys-font-body-bold sys-color-body" style="margin-top:0; margin-bottom:1em">
  1474. <b>Select a compatibility mode for the program</b>
  1475. </Div>
  1476. <Div id=loc42 class="sys-font-body sys-color-body" style="margin-top:0; margin-bottom:1em">
  1477. Choose the operating system that is recommended for this program,
  1478. or that previously supported the program correctly:
  1479. </Div>
  1480. <Div class="sys-font-body sys-color-body" style="margin-top:0; margin-bottom:1em">
  1481. <INPUT CHECKED name=layer type=radio value=WIN95 id=chkWin95 ondblclick="javascript:onRadioDblClick()">
  1482. <label id=lblWIN95 for=chkWin95 ondblclick="javascript:onRadioDblClick()"
  1483. title="Set to run under Windows 95 compatibility mode" ACCESSKEY="5">
  1484. Microsoft Windows 9<u>5</u>
  1485. </label>
  1486. </Div>
  1487. <Div class="sys-font-body sys-color-body" style="margin-top:0; margin-bottom:1em">
  1488. <INPUT name=layer type=radio value=NT4SP5 id=chkNT4SP5 ondblclick="javascript:onRadioDblClick()">
  1489. <label id=lblNT4SP5 for=chkNT4SP5 ondblclick="javascript:onRadioDblClick()"
  1490. title="Set to run under NT4 Service pack 5 compatibility mode" ACCESSKEY="T">
  1491. Microsoft Windows N<u>T</u> 4.0 (Service Pack 5)
  1492. </label>
  1493. </Div>
  1494. <Div class="sys-font-body sys-color-body" style="margin-top:0; margin-bottom:1em">
  1495. <INPUT name=layer type=radio value=WIN98 id=chkWin98 ondblclick="javascript:onRadioDblClick()">
  1496. <label id=lblWIN98 for=chkWin98 ondblclick="javascript:onRadioDblClick()"
  1497. title="Set to run under Windows 98/Windows Me compatibility mode" ACCESSKEY="8">
  1498. Microsoft Windows 9<u>8</u> / Windows Me
  1499. </label>
  1500. </Div>
  1501. <Div class="sys-font-body sys-color-body" style="margin-top:0; margin-bottom:1em">
  1502. <INPUT name=layer type=radio value=WIN2000 id=chkWin2000 ondblclick="javascript:onRadioDblClick()">
  1503. <label id=lblWIN2000 for=chkWin2000 ondblclick="javascript:onRadioDblClick()"
  1504. title="Set to run under Windows 2000 compatibility mode" ACCESSKEY="2">
  1505. Microsoft Windows <u>2</u>000
  1506. </label>
  1507. </Div>
  1508. <Div class="sys-font-body sys-color-body" style="margin-top:0; margin-bottom:1em">
  1509. <INPUT name=layer type=radio value=None id=chkNoLayer ondblclick="javascript:onRadioDblClick()">
  1510. <label id=lblNone for=chkNoLayer ondblclick="javascript:onRadioDblClick()"
  1511. title="Do not apply a compatibility mode" ACCESSKEY="D">
  1512. <u>D</u>o not apply a compatibility mode
  1513. </label>
  1514. </Div>
  1515. </TD>
  1516. </TR>
  1517. </TABLE>
  1518. </form>
  1519. </DIV>
  1520. <!-- Page 5 - FixesOther -->
  1521. <DIV id=FixesOther style="height:100%; display:none; overflow-y:auto">
  1522. <form name="frmFixesOther" method="post" onsubmit='javascript:onBtnNext()' enctype="multipart/form-data" action="">
  1523. <TABLE border=0 cellspacing=0 cellpadding=0 width=100%>
  1524. <TR>
  1525. <TD valign="top">
  1526. <Div id=loc51 class="sys-font-body-bold sys-color-body" style="margin-top:0; margin-bottom:1em">
  1527. <b>Select display settings for the program</b>
  1528. </Div>
  1529. <Div id=loc52 class="sys-font-body sys-color-body" style="margin-top:0; margin-bottom:1em">
  1530. Choose the settings that are recommended for this program,
  1531. or that previously supported the program correctly:
  1532. </Div>
  1533. <Div class="sys-font-body sys-color-body" style="margin-top:0; margin-bottom:1em">
  1534. <INPUT type=checkbox name=chk256color id=chk256color value="256COLOR" >
  1535. <label id=lbl256COLOR for=chk256color title="Run program in 256 colors mode"
  1536. ACCESSKEY="R">
  1537. 256 colo<u>r</u>s
  1538. </LABEL>
  1539. </Div>
  1540. <Div class="sys-font-body sys-color-body" style="margin-top:0; margin-bottom:1em">
  1541. <INPUT type=checkbox name=chk640x480 id=chk640x480 value="640X480" >
  1542. <label id=lbl640X480 for=chk640x480 title="Run program in 640 x 480 screen resolution"
  1543. ACCESSKEY="s">
  1544. 640 x 480 <u>s</u>creen resolution
  1545. </LABEL>
  1546. </Div>
  1547. <Div class="sys-font-body sys-color-body" style="margin-top:0; margin-bottom:1em">
  1548. <INPUT type=checkbox name=chkNoThemes id=chkNoThemes value="DISABLETHEMES" >
  1549. <label id=lblDISABLETHEMES for=chkNoThemes title="Disable visual themes"
  1550. ACCESSKEY="D">
  1551. <u>D</u>isable visual themes
  1552. </LABEL>
  1553. <div id=loc53 class="sys-font-body sys-color-body" style="margin-left:2em; margin-top:0em; margin-bottom:0em">
  1554. By default, Windows XP uses visual themes that may change the appearance or behavior of other programs.
  1555. </div>
  1556. </Div>
  1557. <Div class="sys-font-body sys-color-body" style="margin-top:0; margin-bottom:1em">
  1558. <INPUT type=checkbox name=chkSimAdmin id=chkSimAdmin value="LUA" >
  1559. <label id=lblLUA for=chkSimAdmin title="Simulate administrative privileges"
  1560. ACCESSKEY="V">
  1561. Simulate administrative pri<u>v</u>ileges
  1562. </label>
  1563. </Div>
  1564. <Div class="sys-font-body sys-color-body" style="margin-top:0; margin-bottom:1em">&nbsp;</Div>
  1565. <Div id=loc54 class="sys-font-body sys-color-body" style="margin-top:0; margin-bottom:1em">
  1566. <b>Note:</b> These options apply most commonly to games or educational programs.
  1567. If your program is not a game or educational title,
  1568. it is likely that you don't need to select anything on this page.
  1569. </Div>
  1570. </TD>
  1571. </TR>
  1572. </TABLE>
  1573. </form>
  1574. </DIV>
  1575. <!-- Page 6 - Run -->
  1576. <DIV id=Run style="height:100%; display:none; margin-top:0em; margin-bottom:0em">
  1577. <form name="frmRun" onSubmit="javascript:onBtnNext()" action="" method=post>
  1578. <TABLE border=0 cellPadding=0 cellSpacing=0 width=100% height=100% style="margin-top=0; margin-bottom:0">
  1579. <TR>
  1580. <TD valign="top">
  1581. <Div style="height:100%; overflow-y:auto">
  1582. <Div id=loc61 class="sys-font-body-bold sys-color-body" style="margin-top:0; margin-bottom:1em">
  1583. <b>Test your compatibility settings</b>
  1584. </Div>
  1585. <Div id=loc62 class="sys-font-body-bold sys-color-body" style="margin-top:0; margin-bottom:1em">
  1586. <b>Program name or path:</b>
  1587. </Div>
  1588. <Div id="divTargetApp" class="sys-font-body sys-color-body" style="margin-top:0; margin-bottom:1em; margin-left:1em"></Div>
  1589. <Div id=loc63 class="sys-font-body-bold sys-color-body" style="margin-top:0; margin-bottom:1em">
  1590. <b>Compatibility settings to apply:</b>
  1591. </Div>
  1592. <Div id="divCompatLayer" class="sys-font-body sys-color-body" style="margin-top:0; margin-bottom:2em; margin-left:1em"></div>
  1593. </Div>
  1594. </TD>
  1595. </TR>
  1596. <TR style="height=6em">
  1597. <TD>
  1598. <Div class="sys-font-body sys-color-body" style="vertical-align:bottom; margin-top:0; margin-bottom:1em">
  1599. <Div id=loc64 class="sys-font-body sys-color-body" style="margin-top:0; margin-bottom:1em">
  1600. To test the program with the new compatibility settings, click Next.
  1601. </Div>
  1602. <Div id=loc65 class="sys-font-body sys-color-body" style="margin-top:0; margin-bottom:0em">
  1603. After verifying whether the program worked correctly, return to this wizard.
  1604. </Div>
  1605. </Div>
  1606. </TD>
  1607. </TR>
  1608. </TABLE>
  1609. </form>
  1610. </DIV>
  1611. <!-- Page 7 - Update -->
  1612. <DIV id=Update style="height:100%; display:none; overflow-y:auto; margin-top:0em; margin-bottom:0em">
  1613. <form name="frmUpdate" method="post" onSubmit='javascript:onBtnNext()' action="">
  1614. <TABLE border=0 cellPadding=0 cellSpacing=0 width=100%>
  1615. <TR>
  1616. <TD valign="top">
  1617. <Div id=loc71 class="sys-font-body-bold sys-color-body" style="margin-top:0; margin-bottom:1em">
  1618. <b>Did the program work correctly?</b>
  1619. </Div>
  1620. <Div class="sys-font-body sys-color-body" style="margin-top:0; margin-bottom:1em">
  1621. <input name="UpdateShortcut" type="radio" value="Yes" CHECKED id=chkYes ondblclick="javascript:onRadioDblClick()">
  1622. <label id=lblYes for=chkYes title="Yes, set this program to always use these compatibility settings" ondblclick="javascript:onRadioDblClick()"
  1623. ACCESSKEY="Y">
  1624. <u>Y</u>es, set this program to always use these compatibility settings
  1625. </label>
  1626. </Div>
  1627. <Div class="sys-font-body sys-color-body" style="margin-top:0; margin-bottom:1em">
  1628. <input name="UpdateShortcut" type="radio" value="TryOther" id=chkTryOther ondblclick="javascript:onRadioDblClick()">
  1629. <label id=lblTryOther for=chkTryOther title="No. Try different compatibility settings" ondblclick="javascript:onRadioDblClick()"
  1630. ACCESSKEY="D">
  1631. No, try <u>d</u>ifferent compatibility settings
  1632. </label>
  1633. </Div>
  1634. <Div class="sys-font-body sys-color-body" style="margin-top:0; margin-bottom:2em">
  1635. <input name="UpdateShortcut" type="radio" value="No" id=chkNo ondblclick="javascript:onRadioDblClick()">
  1636. <label id=lblNo for=chkNo title="No, go to the end of this wizard" ondblclick="javascript:onRadioDblClick()"
  1637. ACCESSKEY="F">
  1638. No, I am <u>f</u>inished trying compatibility settings
  1639. </label>
  1640. </Div>
  1641. <Div id=MediaWarning class="sys-font-body sys-color-body" style="margin-top:0; margin-bottom:1em"></div>
  1642. </TD>
  1643. </TR>
  1644. </TABLE>
  1645. </form>
  1646. </DIV>
  1647. <!-- Page 8 - Compatibility Data -->
  1648. <DIV id=CompatibilityData style="height:100%; display:none; margin-top:0em; margin-bottom:0em">
  1649. <form name="frmCompatData" method="post" onSubmit='javascript:onBtnNext()' action="">
  1650. <TABLE border=0 cellPadding=0 cellSpacing=0 width=100% height=100%>
  1651. <TR>
  1652. <TD valign="top">
  1653. <Div id=cwBody style="height:90%; overflow-y:auto">
  1654. <Div id=loc81 class="sys-font-body-bold sys-color-body" style="margin-top:0; margin-bottom:1em">
  1655. <b>Program Compatibility Data</b>
  1656. </Div>
  1657. <Div id=loc82 class="sys-font-body sys-color-body" style="margin-top:0em; margin-bottom:1em; margin-left:0">
  1658. Microsoft has created temporary files that contain information about the settings you selected
  1659. and whether the problems were fixed. Sending this information to Microsoft will help us improve
  1660. program compatibility.
  1661. </Div>
  1662. <Div id=loc83 class="sys-font-body sys-color-body" style="margin-top:0em; margin-bottom:1em; margin-left:0">
  1663. Would you like to send this information to Microsoft?
  1664. </Div>
  1665. <Div class="sys-font-body sys-color-body" style="margin-top:0; margin-bottom:1em">
  1666. <INPUT name=UploadInfo type=radio value=Yes id=chkUploadInfo onclick="javascript:EnableNext()">
  1667. <label id=lblUploadInfo for=chkUploadInfo
  1668. title="Yes, send this information to Microsoft"
  1669. ACCESSKEY="Y">
  1670. <U>Y</U>es
  1671. </label>
  1672. </Div>
  1673. <Div class="sys-font-body sys-color-body" style="margin-top:0; margin-bottom:1em">
  1674. <INPUT name=UploadInfo type=radio value=No id=chkNoUploadInfo onclick="javascript:EnableNext()">
  1675. <label id=lblNoUploadInfo for=chkNoUploadInfo
  1676. title="No, Do not send this information to Microsoft"
  1677. ACCESSKEY="o">
  1678. N<U>o</U>
  1679. </label>
  1680. </Div>
  1681. <Div id=loc84 class="sys-font-body sys-color-body" style="margin-top:0em; margin-bottom:1em; margin-left:0">
  1682. The information will be treated anonymously and confidentially per
  1683. <a target="_new" href="http://go.microsoft.com/fwlink/?LinkId=825">our data collection policy</a> on the the Web.
  1684. </Div>
  1685. <Div id=loc85 class="sys-font-body sys-color-body" style="margin-top:0em; margin-bottom:1em; margin-left:0">
  1686. <a href="javascript:ViewTempFileList();">See the temporary files that would be sent</a>
  1687. </Div>
  1688. </Div>
  1689. </TD>
  1690. </TR>
  1691. </TABLE>
  1692. </form>
  1693. </DIV>
  1694. <!-- Page 9 - Finish -->
  1695. <DIV id=CompleteWizard style="height:100%; display:none; margin-top:0em; margin-bottom:0em">
  1696. <form name="frmCompleteWizard" method="post" onSubmit='javascript:onBtnNext()' action="">
  1697. <TABLE border=0 cellPadding=0 cellSpacing=0 width=100% height=100%>
  1698. <TR>
  1699. <TD valign="top">
  1700. <Div id=cwBody style="height:90%; overflow-y:auto">
  1701. <Div id=loc91 class="sys-font-body-bold sys-color-body" style="margin-top:0; margin-bottom:1em">
  1702. <b>Completing the Program Compatibility Wizard</b>
  1703. </Div>
  1704. <Div id="divCompatSettings" class="sys-font-body sys-color-body" style="margin-top:0; margin-bottom:2em"></Div>
  1705. <Div id=loc92 class="sys-font-body sys-color-body" style="margin-top:0; margin-bottom:1em">
  1706. To readjust or remove compatibility settings, run this wizard again.
  1707. </Div>
  1708. </Div>
  1709. </TD>
  1710. </TR>
  1711. <TR style="height:2.5em">
  1712. <TD>
  1713. <Div id=loc93 class="sys-font-body sys-color-body" style="vertical-align:bottom; margin-top:0; margin-bottom:1em">
  1714. To close this wizard, click Finish.
  1715. </Div>
  1716. </TD>
  1717. </TR>
  1718. </TABLE>
  1719. </form>
  1720. </DIV>
  1721. </td>
  1722. </tr>
  1723. <tr style="height:3em" valign=top>
  1724. <td>
  1725. <hr>
  1726. <form name="frmNav" method="post" onsubmit='javascript:onBtnNext()'>
  1727. <p align="right">
  1728. <BUTTON id=btnBack value="Back" onclick="javascript:onBtnBack()" name="btnBack" style="width:6em; margin-left:0em; margin-right:0.5em; margin-top:0em"></BUTTON>
  1729. <BUTTON id=btnNext type="Submit" value="Next" onclick="javascript:onBtnNext()" name="btnNext" style="width:6em; margin-left:0.5em; margin-right:0.5em; margin-top:0em"></BUTTON>
  1730. <BUTTON id=btnCancel value="Cancel" onclick="javascript:onBtnCancel()" name="btnCancel" style="width:6em; margin-left:0.5em; margin-right:0em; margin-top:0em"></BUTTON>
  1731. </p>
  1732. </form>
  1733. </TD>
  1734. </TR>
  1735. </TABLE>
  1736. </body>
  1737. </HTML>