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
- StaticDataManager.cs
- DateTimeConverter.cs
- FileAuthorizationModule.cs
- RoutedCommand.cs
- TCPListener.cs
- CacheDict.cs
- CompilerError.cs
- SqlNotificationRequest.cs
- ParserExtension.cs
- UnaryOperationBinder.cs
- ProcessStartInfo.cs
- DesignerVerb.cs
- coordinator.cs
- ExtendedPropertyDescriptor.cs
- MimeWriter.cs
- ObservableCollection.cs
- DataServiceRequestException.cs
- ObjectDataSourceDisposingEventArgs.cs
- SHA1Managed.cs
- PartialList.cs
- Sql8ConformanceChecker.cs
- OleDbCommandBuilder.cs
- SqlDataSourceSelectingEventArgs.cs
- ValueTypeFieldReference.cs
- HierarchicalDataSourceIDConverter.cs
- IndexedGlyphRun.cs
- RootBrowserWindowAutomationPeer.cs
- CatalogPart.cs
- LinqDataSourceDisposeEventArgs.cs
- EntityDataSourceChangingEventArgs.cs
- StaticTextPointer.cs
- PropertyGridEditorPart.cs
- HtmlControlDesigner.cs
- ChtmlTextWriter.cs
- HitTestResult.cs
- _WebProxyDataBuilder.cs
- XmlSchemaAll.cs
- Rotation3D.cs
- ReaderWriterLockSlim.cs
- CompilerScopeManager.cs
- RuntimeCompatibilityAttribute.cs
- TripleDESCryptoServiceProvider.cs
- ManualResetEvent.cs
- UndoUnit.cs
- ImageFormatConverter.cs
- NetTcpSecurity.cs
- TextDpi.cs
- FamilyCollection.cs
- VersionPair.cs
- ConditionCollection.cs
- ProgressBar.cs
- TableParagraph.cs
- LogLogRecordHeader.cs
- Font.cs
- TextAnchor.cs
- ConnectionManager.cs
- WorkflowQueueInfo.cs
- UTF8Encoding.cs
- PageClientProxyGenerator.cs
- GridViewAutomationPeer.cs
- GenericsInstances.cs
- AspCompat.cs
- SecurityContext.cs
- DockPattern.cs
- DataError.cs
- COM2IDispatchConverter.cs
- ProviderConnectionPointCollection.cs
- GetMemberBinder.cs
- BitmapEffectvisualstate.cs
- BinaryCommonClasses.cs
- FloaterBaseParagraph.cs
- TwoPhaseCommit.cs
- SoapSchemaExporter.cs
- DeclarativeCatalogPartDesigner.cs
- HwndKeyboardInputProvider.cs
- HuffmanTree.cs
- EncryptedData.cs
- FormViewUpdateEventArgs.cs
- TextAction.cs
- DynamicMethod.cs
- DebuggerAttributes.cs
- OperationAbortedException.cs
- XmlSchemaComplexContent.cs
- Msec.cs
- Collection.cs
- XamlFilter.cs
- SQLGuidStorage.cs
- ComPlusDiagnosticTraceRecords.cs
- Operand.cs
- _UriTypeConverter.cs
- EntityTypeBase.cs
- CachedResourceDictionaryExtension.cs
- ReferentialConstraint.cs
- SqlStream.cs
- OdbcConnectionOpen.cs
- ServiceMetadataContractBehavior.cs
- WebPartMenuStyle.cs
- DataGridColumnReorderingEventArgs.cs
- EdmPropertyAttribute.cs
- DbCommandDefinition.cs