private void HandleCancel() { SecurityHelper.DemandUIWindowPermission(); // After _runApplication is set to true, we no longer allow canceling deployment. if (_cancelHandled || _runApplication) return; _cancelHandled = _canceled = true; // Delete the cached trust decision to force going down the full ClickOnce path next time DeleteCachedApplicationTrust(_identity); // If we are being shut down by the browser, don't do anything else. if (IsShuttingDown) { AbortActivation(); return; } CancelAsynchronousOperation(); // ASSUMES ALREADY IN CORRECT CONTEXT SetStatusText(SR.Get(SRID.HostingStatusCancelled)); string errorTitle, errorMessage; DeploymentExceptionMapper.GetErrorTextFromException(null, out errorTitle, out errorMessage); IErrorPage errorpage = null; //dont even try to use reflection if assembly name is null if (_errorPageAssembly != null || _errorPageClass != null) { errorpage = GetCustomPage(_errorPageAssembly, _errorPageClass) as IErrorPage; } //if this is null then there is no custom page so fall back to default ui if (errorpage == null) { //use default class errorpage = new InstallationErrorPage() as IErrorPage; } errorpage.DeploymentPath = _deploymentManifest; errorpage.ErrorTitle = errorTitle; errorpage.ErrorText = errorMessage; errorpage.SupportUri = null; errorpage.LogFilePath = null; errorpage.ErrorFlag = false; errorpage.RefreshCallback = new DispatcherOperationCallback(UserRefresh); errorpage.GetWinFxCallback = null; BrowserWindow.Navigate(errorpage); }
private void HandleError(Exception exception, string logFilePath, Uri supportUri, string requiredWpfVersion) { SecurityHelper.DemandUIWindowPermission(); ClearAsynchronousOperationStatus(); // Delete the cached trust decision to force going down the full ClickOnce path next time DeleteCachedApplicationTrust(_identity); // If we are being shut down by the browser, don't do anything else. if (IsShuttingDown) { AbortActivation(); return; } // ASSUMES ALREADY IN CORRECT CONTEXT SetStatusText(SR.Get(SRID.HostingStatusFailed)); string version = String.Empty; MissingDependencyType getWinFXReq = MissingDependencyType.Others; if (exception is DependentPlatformMissingException) { if (requiredWpfVersion != null) { getWinFXReq = MissingDependencyType.WinFX; version = requiredWpfVersion; DeploymentExceptionMapper.ConstructFwlinkUrl(version, out _fwlinkUri); _requiredCLRVersion = ClrVersionFromWinFXVersion(version); } else { getWinFXReq = DeploymentExceptionMapper.GetWinFXRequirement(exception, _hostingManager, out version, out _fwlinkUri); switch(getWinFXReq) { case MissingDependencyType.WinFX: _requiredCLRVersion = ClrVersionFromWinFXVersion(version); break; case MissingDependencyType.CLR: _requiredCLRVersion = version; break; default: break; } } } if (String.IsNullOrEmpty(_requiredCLRVersion)) { // This scenario is possible of we have a valid WPF version that we could not map to known CLR version // We have no scheme that can reliably predict how to install future versions of the framework. // This code prevents us from offering an FWLink or activation button for future versions of the Framework getWinFXReq = MissingDependencyType.Others; } string errorTitle, errorMessage; switch(getWinFXReq) { case MissingDependencyType.WinFX: // Wrong version of Avalon is installed. errorTitle = SR.Get(SRID.PlatformRequirementTitle); errorMessage = SR.Get(SRID.IncompatibleWinFXText, version); break; case MissingDependencyType.CLR: // Missing CLR dependency errorTitle = SR.Get(SRID.PlatformRequirementTitle); errorMessage = SR.Get(SRID.IncompatibleCLRText, version); break; default: // All other deployment exceptions DeploymentExceptionMapper.GetErrorTextFromException(exception, out errorTitle, out errorMessage); break; } IErrorPage errorpage = null; if (_errorPageClass != null) { errorpage = GetCustomPage(_errorPageAssembly, _errorPageClass) as IErrorPage; } // If we failed to get a custom page, or didn't even try, use our default. if (errorpage == null) { //use default class errorpage = new InstallationErrorPage() as IErrorPage; } errorpage.DeploymentPath = _deploymentManifest; errorpage.ErrorTitle = errorTitle; errorpage.ErrorText = errorMessage; errorpage.SupportUri = supportUri; errorpage.LogFilePath = logFilePath; errorpage.RefreshCallback = new DispatcherOperationCallback(UserRefresh); errorpage.GetWinFxCallback = (getWinFXReq != MissingDependencyType.Others)? new DispatcherOperationCallback(GetWinFX) : null; errorpage.ErrorFlag = true; BrowserWindow.Navigate(errorpage); }