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