Code:
/ WCF / WCF / 3.5.30729.1 / untmp / Orcas / SP / ndp / cdf / src / WCF / Tools / xws_reg / ServiceModelReg.cs / 4 / ServiceModelReg.cs
//------------------------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------------------------- namespace Microsoft.Tools.ServiceModel { using System; using System.Collections; using System.Collections.Generic; using System.Globalization; using System.IO; using System.Reflection; using System.Runtime.InteropServices; using System.Security; using System.Security.Permissions; using System.Security.Principal; using System.ServiceModel.Install; using System.ServiceModel.Install.Configuration; using System.Text; using System.Threading; class ServiceModelReg { const string MutexName = "ServiceModelReg_f685339e-b522-4d07-8921-1d75962f1905"; const string webEngineDllName = @"webengine.dll"; static Mutex SingleInstance; static bool passedLocalSecurityChecks; string[] protocols = new string[] { "net.tcp", "net.pipe", "net.msmq", "msmq.formatname" }; CommandArguments commandArguments; // internal static bool ShouldInstallToWebConfig { get { return File.Exists(Path.Combine(InstallHelper.GetFrameworkInstallPath(), webEngineDllName)); } } static ServiceModelReg() { ServiceModelReg.passedLocalSecurityChecks = ServiceModelReg.InitializeSecurity(); } static bool InitializeSecurity() { bool initializedSecurity = false; try { AppDomain myDomain = Thread.GetDomain(); myDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal); // Demand FullTrust permissionset new NamedPermissionSet("FullTrust").Demand(); // Demand Administrator role SecurityIdentifier builtInAdministrators = new SecurityIdentifier(WellKnownSidType.BuiltinAdministratorsSid, null); foreach (IdentityReference id in WindowsIdentity.GetCurrent().Groups) { if (builtInAdministrators.Value.Equals(id.Value, StringComparison.Ordinal)) { initializedSecurity = true; break; } } if (!initializedSecurity) { ServiceModelReg.LogError(SR2.GetString(SR2.AccessDeniedLocalAdmin)); } } catch (SecurityException) { ServiceModelReg.LogError(SR2.GetString(SR2.AccessDeniedFullTrust)); } return initializedSecurity; } QueueBuildActionQueue() { Queue actionQueue = new Queue (); if (this.commandArguments.ApplyToConfig) { if (InstallHelper.Is64BitMachine() && !String.IsNullOrEmpty(InstallHelper.Wow64MachineConfigFileName)) { if (File.Exists(InstallHelper.Wow64MachineConfigFileName)) { actionQueue.Enqueue(new ActionItem(ConfigurationHandlersInstallComponent.CreateWow64ConfigurationHandlersInstallComponent(), this.commandArguments.InstallAction, this.commandArguments.OutputLevel)); } else { EventLogger.LogWarning(SR2.GetString(SR2.Wow64NotInstalled, System.ServiceModel.Install.SR.GetString(System.ServiceModel.Install.SR.CommunicationSectionNameWow64)), (OutputLevel.Verbose == this.commandArguments.OutputLevel)); } } actionQueue.Enqueue(new ActionItem(ConfigurationHandlersInstallComponent.CreateNativeConfigurationHandlersInstallComponent(), this.commandArguments.InstallAction, this.commandArguments.OutputLevel)); if (ShouldInstallToWebConfig) { if (InstallHelper.Is64BitMachine() && !String.IsNullOrEmpty(InstallHelper.Wow64WebConfigFileName)) { if (File.Exists(InstallHelper.Wow64WebConfigFileName)) { actionQueue.Enqueue(new ActionItem(BuildProviderInstallComponent.CreateWow64BuildProviderInstallComponent(), this.commandArguments.InstallAction, this.commandArguments.OutputLevel)); actionQueue.Enqueue(new ActionItem(CompilationAssemblyInstallComponent.CreateWow64CompilationAssemblyInstallComponent(), this.commandArguments.InstallAction, this.commandArguments.OutputLevel)); actionQueue.Enqueue(new ActionItem(HttpHandlersInstallComponent.CreateWow64HttpHandlersInstallComponent(), this.commandArguments.InstallAction, this.commandArguments.OutputLevel)); actionQueue.Enqueue(new ActionItem(HttpModulesInstallComponent.CreateWow64HttpModulesInstallComponent(), this.commandArguments.InstallAction, this.commandArguments.OutputLevel)); } else { EventLogger.LogWarning(SR2.GetString(SR2.Wow64NotInstalled, System.ServiceModel.Install.SR.GetString(System.ServiceModel.Install.SR.BuildProviderNameWow64)), (OutputLevel.Verbose == this.commandArguments.OutputLevel)); EventLogger.LogWarning(SR2.GetString(SR2.Wow64NotInstalled, System.ServiceModel.Install.SR.GetString(System.ServiceModel.Install.SR.CompilationAssemblyNameWow64)), (OutputLevel.Verbose == this.commandArguments.OutputLevel)); EventLogger.LogWarning(SR2.GetString(SR2.Wow64NotInstalled, System.ServiceModel.Install.SR.GetString(System.ServiceModel.Install.SR.HttpHandlersComponentNameWow64)), (OutputLevel.Verbose == this.commandArguments.OutputLevel)); EventLogger.LogWarning(SR2.GetString(SR2.Wow64NotInstalled, System.ServiceModel.Install.SR.GetString(System.ServiceModel.Install.SR.HttpModulesComponentNameWow64)), (OutputLevel.Verbose == this.commandArguments.OutputLevel)); } } actionQueue.Enqueue(new ActionItem(BuildProviderInstallComponent.CreateNativeBuildProviderInstallComponent(), this.commandArguments.InstallAction, this.commandArguments.OutputLevel)); actionQueue.Enqueue(new ActionItem(CompilationAssemblyInstallComponent.CreateNativeCompilationAssemblyInstallComponent(), this.commandArguments.InstallAction, this.commandArguments.OutputLevel)); actionQueue.Enqueue(new ActionItem(HttpHandlersInstallComponent.CreateNativeHttpHandlersInstallComponent(), this.commandArguments.InstallAction, this.commandArguments.OutputLevel)); actionQueue.Enqueue(new ActionItem(HttpModulesInstallComponent.CreateNativeHttpModulesInstallComponent(), this.commandArguments.InstallAction, this.commandArguments.OutputLevel)); if (IisHelper.ShouldInstallWas) { BuildActionQueueIis7(actionQueue); } else if (this.commandArguments.ApplyToConfig && InstallAction.Install != this.commandArguments.InstallAction) { if (OSEnvironmentHelper.IsVistaOrGreater) { foreach (string protocol in this.protocols) { if (InstallHelper.Is64BitMachine() && !String.IsNullOrEmpty(InstallHelper.Wow64WebConfigFileName)) { if (File.Exists(InstallHelper.Wow64WebConfigFileName)) { actionQueue.Enqueue(new ActionItem(ProtocolsInstallComponent.CreateWow64ProtocolsInstallComponent(protocol), InstallAction.Uninstall, this.commandArguments.OutputLevel)); actionQueue.Enqueue(new ActionItem(TransportConfigurationTypeInstallComponent.CreateWow64TransportConfigurationTypeInstallComponent(protocol), InstallAction.Uninstall, this.commandArguments.OutputLevel)); } } actionQueue.Enqueue(new ActionItem(ProtocolsInstallComponent.CreateNativeProtocolsInstallComponent(protocol), InstallAction.Uninstall, this.commandArguments.OutputLevel)); actionQueue.Enqueue(new ActionItem(TransportConfigurationTypeInstallComponent.CreateNativeTransportConfigurationTypeInstallComponent(protocol), InstallAction.Uninstall, this.commandArguments.OutputLevel)); } } } } } if (this.commandArguments.ApplyToScriptMaps && ShouldInstallToWebConfig) { // We do not need to install ScriptMaps for IIS7. if (!IisHelper.ShouldInstallWas) { if (IisHelper.ShouldInstallIis && IisHelper.ShouldEnableIISAdmin) { try { actionQueue.Enqueue(new ActionItem(new WebHostScriptMappingsInstallComponent(this.commandArguments.ScriptMapPath, this.commandArguments.Recursive, this.commandArguments.UpdateScriptMaps), this.commandArguments.InstallAction, this.commandArguments.OutputLevel)); } catch (Exception exception) { // If we are running as part of framework install, we should tolerate failures in script map installation if (IsFatal(exception) || !this.commandArguments.RunInstallScript) { throw; } ServiceModelReg.LogException(exception); } } else if (!IisHelper.ShouldInstallIis) { EventLogger.LogWarning(SR2.GetString(SR2.IisNotInstalled, System.ServiceModel.Install.SR.GetString(System.ServiceModel.Install.SR.WebHostScriptMappingsName)), (OutputLevel.Verbose == this.commandArguments.OutputLevel)); } else { EventLogger.LogWarning(SR2.GetString(SR2.IISAdminNotEnabled, System.ServiceModel.Install.SR.GetString(System.ServiceModel.Install.SR.WebHostScriptMappingsName)), (OutputLevel.Verbose == this.commandArguments.OutputLevel)); } } else { EventLogger.LogWarning(SR2.GetString(SR2.ServiceModelRegScriptMapsNotSupported), (OutputLevel.Verbose == this.commandArguments.OutputLevel)); } } if (this.commandArguments.RunInstallScript) { actionQueue.Enqueue(new ActionItem(new WmiInstallComponent(), this.commandArguments.InstallAction, this.commandArguments.OutputLevel)); if (this.commandArguments.InstallServices) { actionQueue.Enqueue(new ActionItem(new InfoCardServiceInstallComponent(), this.commandArguments.InstallAction, this.commandArguments.OutputLevel)); actionQueue.Enqueue(new ActionItem(ListenerServiceInstallComponent.CreateTcpPortSharingServiceInstallComponent(), this.commandArguments.InstallAction, this.commandArguments.OutputLevel)); if (OSEnvironmentHelper.IsVistaOrGreater) { Nullable activationServiceInstallAction = null; if (IisHelper.ShouldInstallWas) { activationServiceInstallAction = this.commandArguments.InstallAction; } else if (InstallAction.Install != this.commandArguments.InstallAction) { activationServiceInstallAction = InstallAction.Uninstall; } if (activationServiceInstallAction.HasValue) { actionQueue.Enqueue(new ActionItem(ListenerServiceInstallComponent.CreateTcpActivationServiceInstallComponent(), activationServiceInstallAction.Value, this.commandArguments.OutputLevel)); actionQueue.Enqueue(new ActionItem(ListenerServiceInstallComponent.CreateNamedPipeActivationServiceInstallComponent(), activationServiceInstallAction.Value, this.commandArguments.OutputLevel)); actionQueue.Enqueue(new ActionItem(ListenerServiceInstallComponent.CreateMsmqActivationServiceInstallComponent(), activationServiceInstallAction.Value, this.commandArguments.OutputLevel)); } } } actionQueue.Enqueue(new ActionItem(new HttpNamespaceReservationInstallComponent(), this.commandArguments.InstallAction, this.commandArguments.OutputLevel)); } return actionQueue; } void BuildActionQueueIis7(Queue actionQueue) { foreach (string protocol in this.protocols) { if (InstallHelper.Is64BitMachine() && !String.IsNullOrEmpty(InstallHelper.Wow64WebConfigFileName)) { if (File.Exists(InstallHelper.Wow64WebConfigFileName)) { actionQueue.Enqueue(new ActionItem(ProtocolsInstallComponent.CreateWow64ProtocolsInstallComponent(protocol), this.commandArguments.InstallAction, this.commandArguments.OutputLevel)); actionQueue.Enqueue(new ActionItem(TransportConfigurationTypeInstallComponent.CreateWow64TransportConfigurationTypeInstallComponent(protocol), this.commandArguments.InstallAction, this.commandArguments.OutputLevel)); } else { EventLogger.LogWarning(SR2.GetString(SR2.Wow64NotInstalled, System.ServiceModel.Install.SR.GetString(System.ServiceModel.Install.SR.ProtocolsNameWow64, protocol)), (OutputLevel.Verbose == this.commandArguments.OutputLevel)); EventLogger.LogWarning(SR2.GetString(SR2.Wow64NotInstalled, System.ServiceModel.Install.SR.GetString(System.ServiceModel.Install.SR.TransportConfigurationNameWow64, protocol)), (OutputLevel.Verbose == this.commandArguments.OutputLevel)); } } if (IisHelper.ShouldInstallApplicationHost) { actionQueue.Enqueue(new ActionItem(ListenerAdaptersInstallComponent.CreateNativeListenerAdaptersInstallComponent(protocol), this.commandArguments.InstallAction, this.commandArguments.OutputLevel)); } else { EventLogger.LogWarning(SR2.GetString(SR2.ApplicationHostConfigNotInstalled, System.ServiceModel.Install.SR.GetString(System.ServiceModel.Install.SR.ListenerAdaptersName, protocol)), (OutputLevel.Verbose == this.commandArguments.OutputLevel)); } actionQueue.Enqueue(new ActionItem(ProtocolsInstallComponent.CreateNativeProtocolsInstallComponent(protocol), this.commandArguments.InstallAction, this.commandArguments.OutputLevel)); actionQueue.Enqueue(new ActionItem(TransportConfigurationTypeInstallComponent.CreateNativeTransportConfigurationTypeInstallComponent(protocol), this.commandArguments.InstallAction, this.commandArguments.OutputLevel)); } if (IisHelper.ShouldInstallIis) { if (IisHelper.ShouldInstallApplicationHost) { actionQueue.Enqueue(new ActionItem(WasHttpModulesInstallComponent.CreateNativeWasHttpModulesInstallComponent(), this.commandArguments.InstallAction, this.commandArguments.OutputLevel)); actionQueue.Enqueue(new ActionItem(WasHttpHandlersInstallComponent.CreateNativeWasHttpHandlersInstallComponent(), this.commandArguments.InstallAction, this.commandArguments.OutputLevel)); } else { EventLogger.LogWarning(SR2.GetString(SR2.ApplicationHostConfigNotInstalled, System.ServiceModel.Install.SR.GetString(System.ServiceModel.Install.SR.HttpModulesComponentNameWAS)), (OutputLevel.Verbose == this.commandArguments.OutputLevel)); EventLogger.LogWarning(SR2.GetString(SR2.ApplicationHostConfigNotInstalled, System.ServiceModel.Install.SR.GetString(System.ServiceModel.Install.SR.HttpHandlersComponentNameWAS)), (OutputLevel.Verbose == this.commandArguments.OutputLevel)); } } } void DisplayLogo() { // ThisAssembly conflicts with one imported from System.ServiceModel.Install.dll (friend assembly) // build uses the correct one (local)...\ // Using CommonResStrings.WcfTrademarkForCmdLine for the trademark: the proper resource for command line tools. #pragma warning disable 436 Console.WriteLine(SR2.GetString(SR2.HelpLogo, CommonResStrings.WcfTrademarkForCmdLine, ThisAssembly.InformationalVersion, CommonResStrings.CopyrightForCmdLine)); #pragma warning restore 436 } static void LogException(Exception e) { // If passed security checks, System.ServiceModel.Install.dll // log error should be available (which also uses NT Event Log). // Otherwise, event log may not be available due to security // restrictions, so only log to console. if (ServiceModelReg.passedLocalSecurityChecks) { // Wrap method to prevent LinkDemand in this method ServiceModelReg.InstallHelperLogException(e); } else { Console.WriteLine(); #if DEBUG Console.WriteLine(String.Format(CultureInfo.CurrentUICulture,SR2.GetString(SR2.Error, e.ToString()))); #else Console.WriteLine(String.Format(CultureInfo.CurrentUICulture,SR2.GetString(SR2.Error, e.Message))); #endif } } static void LogError(string message) { // If passed security checks, System.ServiceModel.Install.dll // log error should be available (which also uses NT Event Log). // Otherwise, event log may not be available due to security // restrictions, so only log to console. if (ServiceModelReg.passedLocalSecurityChecks) { // Wrap method to prevent LinkDemand in this method ServiceModelReg.InstallHelperLogError(message); } else { Console.WriteLine(); Console.WriteLine(String.Format(CultureInfo.CurrentUICulture, message)); } } static void InstallHelperLogException(Exception e) { EventLogger.LogException(e); } static void InstallHelperLogError(string message) { EventLogger.LogError(message); } static int Main(string[] args) { Environment.ExitCode = NativeMethods.ERROR_APP_INIT_FAILURE; ServiceModelReg.ValidateUICulture(); if (!ServiceModelReg.passedLocalSecurityChecks) { Environment.ExitCode = NativeMethods.ERROR_ACCESS_DENIED; } else { // Wrap method to prevent LinkDemand in this method Environment.ExitCode = ServiceModelReg.TryRun(args); } return Environment.ExitCode; } static int TryRun(string[] args) { try { using (ServiceModelReg.SingleInstance = new Mutex(false, ServiceModelReg.MutexName)) { if (ServiceModelReg.SingleInstance.WaitOne(1, true)) { Environment.ExitCode = NativeMethods.ERROR_UNHANDLED_EXCEPTION; ServiceModelReg app = new ServiceModelReg(); Environment.ExitCode = app.Run(args); } else { Console.WriteLine(SR2.GetString(SR2.ServiceModelRegMultipleInstanceError)); } } } catch (SecurityException) { Environment.ExitCode = NativeMethods.ERROR_ACCESS_DENIED; } #pragma warning suppress 56500 // covered by FxCOP catch (Exception e) { ServiceModelReg.LogException(e); if (e is System.ComponentModel.Win32Exception) { System.ComponentModel.Win32Exception win32Exception = (System.ComponentModel.Win32Exception)e; Environment.ExitCode = win32Exception.NativeErrorCode; } else if (null != e.InnerException && e.InnerException is System.ComponentModel.Win32Exception) { System.ComponentModel.Win32Exception win32Exception = (System.ComponentModel.Win32Exception)e.InnerException; Environment.ExitCode = win32Exception.NativeErrorCode; } else { Environment.ExitCode = NativeMethods.ERROR_UNHANDLED_EXCEPTION; } } EventLogger.TerminateMsiStyleLogging(); return Environment.ExitCode; } int Run(string[] args) { try { this.commandArguments = new CommandArguments(args); } catch (ApplicationException e) { DisplayLogo(); ServiceModelReg.LogException(e); Console.WriteLine(); CommandArguments.DisplayUsage(); return NativeMethods.ERROR_APP_INIT_FAILURE; } if (this.commandArguments.RunInstallScript) { EventLogger.InitializeMsiStyleLogging(); } if (this.commandArguments.DisplayLogo || this.commandArguments.DisplayHelp) { DisplayLogo(); } if (this.commandArguments.DisplayHelp) { CommandArguments.DisplayUsage(); return NativeMethods.ERROR_SUCCESS; } Queue actionQueue = BuildActionQueue(); if (0 == actionQueue.Count) { throw new ApplicationException(SR2.GetString(SR2.ServiceModelRegNoValidOptionsError)); } // If action is Install, Uninstall[All], or Reinstall log start message in event log if (InstallAction.Install == this.commandArguments.InstallAction || InstallAction.Uninstall == this.commandArguments.InstallAction || InstallAction.Reinstall == this.commandArguments.InstallAction) { StringBuilder eventLogStartMessage = new StringBuilder(); eventLogStartMessage = eventLogStartMessage.Append(SR2.GetString(SR2.EventLogMessageStart)); foreach (ActionItem actionItem in actionQueue) { eventLogStartMessage = eventLogStartMessage.Append(actionItem.Component.GetActionString(actionItem.Action) + "\n"); } EventLogger.LogInformation(eventLogStartMessage.ToString(), OutputLevel.Verbose == this.commandArguments.OutputLevel); } Nullable confirmUninstall = null; if (InstallAction.Uninstall == this.commandArguments.InstallAction || InstallAction.Reinstall == this.commandArguments.InstallAction) { if (this.commandArguments.RequireConfirmation) { while (!confirmUninstall.HasValue) { Console.WriteLine(); Console.WriteLine(SR2.GetString(SR2.RequestConfirmation)); foreach (ActionItem actionItem in actionQueue) { Console.WriteLine("\t" + actionItem.Component.DisplayName); } Console.Write(SR2.GetString(SR2.AreYouSure)); string userConfirmation = Console.ReadLine().Trim(); if (userConfirmation.Equals(SR2.GetString(SR2.Yes), StringComparison.OrdinalIgnoreCase)) { confirmUninstall = true; } else if (userConfirmation.Equals(SR2.GetString(SR2.No), StringComparison.OrdinalIgnoreCase)) { confirmUninstall = false; } } } else { confirmUninstall = true; } } bool tolerateActionFailures = this.commandArguments.RunInstallScript && (this.commandArguments.InstallAction == InstallAction.Uninstall); Exception lastException = null; while (0 < actionQueue.Count) { ActionItem actionItem = actionQueue.Dequeue(); try { this.PerformAction(actionItem, confirmUninstall); } catch (Exception exception) { if (IsFatal(exception)) { throw; } bool tolerateWebHostFailure = this.commandArguments.RunInstallScript && (actionItem.Component is WebHostScriptMappingsInstallComponent); if (tolerateWebHostFailure) { ServiceModelReg.LogException(exception); } else if (tolerateActionFailures) { ServiceModelReg.LogException(exception); lastException = exception; } else { throw; } } } if (lastException != null) { throw lastException; } // If action is Install, Uninstall, or Reinstall log success message in event log if (InstallAction.Install == this.commandArguments.InstallAction || InstallAction.Uninstall == this.commandArguments.InstallAction || InstallAction.Reinstall == this.commandArguments.InstallAction) { EventLogger.LogInformation(SR2.GetString(SR2.EventLogMessageSuccess), OutputLevel.Verbose == this.commandArguments.OutputLevel); } return NativeMethods.ERROR_SUCCESS; } static bool IsFatal(Exception exception) { while (exception != null) { if ((exception is OutOfMemoryException && !(exception is InsufficientMemoryException)) || exception is ThreadAbortException || exception is AccessViolationException || exception is SEHException) { return true; } // These exceptions aren't themselves fatal, but since the CLR uses them to wrap other exceptions, // we want to check to see whether they've been used to wrap a fatal exception. If so, then they // count as fatal. if (exception is TypeInitializationException || exception is TargetInvocationException) { exception = exception.InnerException; } else { break; } } return false; } void PerformAction(ActionItem actionItem, Nullable confirmUninstall) { switch (actionItem.Action) { case (InstallAction.Install): if (OutputLevel.Quiet != actionItem.OutputLevel) { EventLogger.LogToConsole(SR2.GetString(SR2.InstallMessage, actionItem.Component.DisplayName)); } EventLogger.WriteMsiStyleLogEntry(SR2.GetString(SR2.InstallMessage, actionItem.Component.DisplayName)); actionItem.Component.Install(actionItem.OutputLevel); break; case (InstallAction.Uninstall): if (confirmUninstall.HasValue && confirmUninstall.Value) { if (OutputLevel.Quiet != actionItem.OutputLevel) { EventLogger.LogToConsole(SR2.GetString(SR2.UninstallMessage, actionItem.Component.DisplayName)); } EventLogger.WriteMsiStyleLogEntry(SR2.GetString(SR2.UninstallMessage, actionItem.Component.DisplayName)); actionItem.Component.Uninstall(actionItem.OutputLevel); } break; case (InstallAction.Reinstall): if (confirmUninstall.HasValue && confirmUninstall.Value) { actionItem.Component.Reinstall(actionItem.OutputLevel); } break; case (InstallAction.ListVersions): Console.WriteLine(); Console.WriteLine(SR2.GetString(SR2.ServiceModelRegInstalledVersions, actionItem.Component.DisplayName)); if (actionItem.Component.IsInstalled) { string[] installedVersions = actionItem.Component.InstalledVersions; if (null == installedVersions || 0 == installedVersions.Length) { Console.WriteLine("\t" + SR2.GetString(SR2.ServiceModelRegNone)); } else { foreach (string version in installedVersions) { Console.WriteLine("\t" + String.Format(CultureInfo.CurrentUICulture, version)); } } } else { Console.WriteLine("\t" + SR2.GetString(SR2.ServiceModelRegNone)); } break; case (InstallAction.ListScriptMaps): WebHostScriptMappingsInstallComponent webHostHandlersComponent = (WebHostScriptMappingsInstallComponent)actionItem.Component; string[] installedPaths = webHostHandlersComponent.InstalledPaths; Console.WriteLine(); Console.WriteLine(SR2.GetString(SR2.ServiceModelRegInstalledScriptMaps)); if (null == installedPaths || 0 == installedPaths.Length) { Console.WriteLine("\t" + SR2.GetString(SR2.ServiceModelRegNone)); } else { foreach (string scriptMapInfo in installedPaths) { Console.WriteLine(String.Format(CultureInfo.CurrentUICulture, scriptMapInfo)); } } break; case (InstallAction.VerifyInstall): InstallationState installState = actionItem.Component.VerifyInstall(); string installStateText = SR2.GetString(SR2.InstallationStateUnknown); switch (installState) { case (InstallationState.Unknown): installStateText = SR2.GetString(SR2.InstallationStateUnknown); break; case (InstallationState.NotInstalled): installStateText = SR2.GetString(SR2.InstallationStateNotInstalled); break; case (InstallationState.InstalledDefaults): installStateText = SR2.GetString(SR2.InstallationStateInstalledDefaults); break; case (InstallationState.InstalledCustom): installStateText = SR2.GetString(SR2.InstallationStateInstalledCustom); break; } Console.WriteLine(actionItem.Component.DisplayName + "\t:\t" + installStateText); break; } } // Since we are outputing to the console, force the current UI culture to be the // console fallback UI culture since the console cannot support all code pages for // certain cultures (i.e. it will print garbage characters). Unfortunately, there // are some console fallback cultures that still use code pages incompatible with // the console. Catch those cases and fall back to English because ASCII is widely // accepted in OEM code pages. static void ValidateUICulture() { Thread.CurrentThread.CurrentUICulture = CultureInfo.CurrentUICulture.GetConsoleFallbackUICulture(); if ((System.Console.OutputEncoding.CodePage != Encoding.UTF8.CodePage) && (System.Console.OutputEncoding.CodePage != Thread.CurrentThread.CurrentUICulture.TextInfo.OEMCodePage)) { Thread.CurrentThread.CurrentUICulture = new CultureInfo("en"); } } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- UserUseLicenseDictionaryLoader.cs
- UIElement.cs
- Line.cs
- CommunicationObjectManager.cs
- ManipulationStartedEventArgs.cs
- XmlException.cs
- Rotation3DAnimationUsingKeyFrames.cs
- DbReferenceCollection.cs
- SmtpSection.cs
- FtpRequestCacheValidator.cs
- MSAAEventDispatcher.cs
- MissingMemberException.cs
- ServerReliableChannelBinder.cs
- TimeStampChecker.cs
- ObjectView.cs
- MouseGestureConverter.cs
- ComPlusTypeLoader.cs
- RuntimeConfigLKG.cs
- complextypematerializer.cs
- AsyncMethodInvoker.cs
- ToolStripButton.cs
- MimeMultiPart.cs
- RadioButtonRenderer.cs
- Material.cs
- UserControlCodeDomTreeGenerator.cs
- MetadataArtifactLoaderCompositeResource.cs
- TreeNodeMouseHoverEvent.cs
- CodeLabeledStatement.cs
- Pkcs9Attribute.cs
- BamlRecordHelper.cs
- RelatedPropertyManager.cs
- GroupBox.cs
- XmlSubtreeReader.cs
- NotifyCollectionChangedEventArgs.cs
- MsmqProcessProtocolHandler.cs
- TemplateGroupCollection.cs
- Material.cs
- invalidudtexception.cs
- ConfigurationStrings.cs
- DbReferenceCollection.cs
- Pair.cs
- DefinitionProperties.cs
- AttributeCollection.cs
- ListBoxItem.cs
- InputBindingCollection.cs
- DataBoundControlDesigner.cs
- ParameterCollection.cs
- ToolStripProgressBar.cs
- VectorValueSerializer.cs
- ThrowHelper.cs
- DataGridColumnHeadersPresenter.cs
- PackagingUtilities.cs
- ToolStripPanelCell.cs
- AmbiguousMatchException.cs
- AccessorTable.cs
- CorrelationValidator.cs
- PartitionerStatic.cs
- DefaultEventAttribute.cs
- CellQuery.cs
- GradientBrush.cs
- InfoCardTraceRecord.cs
- AstNode.cs
- TreeNode.cs
- __Filters.cs
- IISUnsafeMethods.cs
- ListViewVirtualItemsSelectionRangeChangedEvent.cs
- WebPartsPersonalization.cs
- RuntimeArgumentHandle.cs
- cookiecontainer.cs
- ToolStripGrip.cs
- HtmlInputPassword.cs
- CompilerGlobalScopeAttribute.cs
- UpDownEvent.cs
- CollectionViewGroup.cs
- DbParameterHelper.cs
- RelationshipNavigation.cs
- _NativeSSPI.cs
- SqlTypesSchemaImporter.cs
- SystemResourceHost.cs
- HttpResponseInternalBase.cs
- GZipDecoder.cs
- RtfToXamlLexer.cs
- RuleRefElement.cs
- StrongNamePublicKeyBlob.cs
- InfocardExtendedInformationCollection.cs
- GlobalProxySelection.cs
- ComboBox.cs
- GridLength.cs
- SQLDouble.cs
- SchemaDeclBase.cs
- XmlWrappingReader.cs
- Throw.cs
- AutomationEventArgs.cs
- FixedDocumentPaginator.cs
- Util.cs
- ComPlusAuthorization.cs
- MouseButtonEventArgs.cs
- DescendantQuery.cs
- CodeVariableReferenceExpression.cs
- Attributes.cs