Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Para definir el importador de contenido de tecnología de implementación de administración de aplicaciones, use una instancia de la Microsoft.ConfigurationManagement.ApplicationManagement.ContentImporter
clase . La nueva instancia de clase definirá el importador de contenido usado por el instalador.
La clase ContentImporter proporciona un diseño de nivel de interfaz donde las tecnologías personalizadas pueden crear instancias y rellenar objetos DeploymentType para una tecnología específica. El concepto de esta clase es que el importador de tecnología determinado puede leer un archivo de contenido específico y crear el objeto DeploymentType correspondiente (con instalador) mediante la información obtenida del contenido. Por ejemplo, la tecnología de Windows Installer lee *.msi archivos y puede rellenar las propiedades Title, Description del objeto DeploymentType y crear las acciones Detectar, Instalar y Desinstalar para el instalador.
En el proyecto de ejemplo Protocolo de Escritorio remoto (RDP), se requiere un nuevo importador de contenido para los archivos de Protocolo de Escritorio remoto (RDP). La compatibilidad con la importación de contenido para archivos RDP no está integrada en Configuration Manager, por lo que se requiere un importador de contenido personalizado.
Introducción básica a la definición de un importador personalizado
Cree una instancia personalizada de la clase ContentImporter.
Invalide la propiedad FileTypes y devuelva los tipos de archivo o extensiones específicos de la tecnología.
Invalide el método CreateDeploymentType para crear un tipo de implementación personalizado mediante la importación de las propiedades necesarias desde un archivo de contenido.
Invalide el método UpdateDeploymentType para actualizar un tipo de instalador personalizado con la configuración de un archivo de contenido.
Funciones auxiliares: incluir para la integridad y la legibilidad del código son dos funciones auxiliares. ProcessFileLine es una función auxiliar llamada desde el método UpdateDeploymentType para procesar cada línea de un archivo de contenido y cargar los valores en el tipo de instalador personalizado. ParseType es una función auxiliar llamada desde la función auxiliar ProcessFileLine. La función auxiliar ParseType analiza una designación de tipo de archivo .rdp y la convierte en un tipo .NET.
Para definir un importador de contenido personalizado
Cree una instancia de la
Microsoft.ConfigurationManagement.ApplicationManagement.ContentImporter
clase mediante elMicrosoft.ConfigurationManagement.ApplicationManagement.ContentImporter
constructor .En el ejemplo siguiente del proyecto de ejemplo RDP se muestra cómo definir un importador de contenido.
// Content importer for .rdp files used by the RDP installer. public class RdpContentImporter : ContentImporter
Invalide la
Microsoft.ConfigurationManagement.ApplicationManagement.ContentImporter.FileTypes
propiedad y defina los tipos de archivo admitidos por el importador de contenido.En el ejemplo siguiente del proyecto de ejemplo RDP se muestra cómo invalidar la propiedad FileTypes.
// File types supported by the content importer. public override IList<FileType> FileTypes { get { return Common.RdpFileTypes; } }
En el proyecto de ejemplo RDP, el valor FileTypes se define en la clase Common del proyecto.
// This defines the file extensions supported by this content importer. internal static readonly FileType[] RdpFileTypes = new[] { new FileType { Name = "RDP", Description = "Remote Desktop Configuration profile", Extensions = new[] { "rdp" } } };
Invalide el
Microsoft.ConfigurationManagement.ApplicationManagement.ContentImporter.CreateDeploymentType
método para administrar la creación de un tipo de implementación personalizado mediante la importación de las propiedades necesarias desde un archivo de contenido.En el ejemplo siguiente del proyecto de ejemplo RDP se muestra cómo invalidar el método CreateDeploymentType.
// Creates a new deployment type from a content file. public override DeploymentType CreateDeploymentType(string contentFile, object context) { Validator.CheckForNull(contentFile, "contentFile"); DeploymentType deploymentType = new DeploymentType(Common.TechnologyId) { Title = Path.GetFileNameWithoutExtension(contentFile) }; UpdateDeploymentType(deploymentType, contentFile); return deploymentType; }
En el proyecto de ejemplo RDP, el parámetro de cadena de DeploymentType se define en la clase Common del proyecto local.
// Internal ID of the technology. public const string TechnologyId = "Rdp";
Invalide el
Microsoft.ConfigurationManagement.ApplicationManagement.ContentImporter.UpdateDeploymentType
método para actualizar un tipo de implementación con la configuración de un archivo de contenido.En el ejemplo siguiente del proyecto de ejemplo RDP se muestra cómo invalidar el método UpdateDeploymentType.
// Updates an existing deployment type installer with settings from content file. public override void UpdateDeploymentType(DeploymentType dt, string contentFile, object context) { Validator.CheckForNull(dt, "dt"); Validator.CheckForNull(contentFile, "contentFile"); RdpInstaller installer = dt.Installer as RdpInstaller; if (null == installer) { throw new ArgumentOutOfRangeException("dt", dt.Installer, @"Installer type is not supported by this content importer."); } if (false == File.Exists(contentFile)) { throw new FileNotFoundException("Content file was not found: " + contentFile, contentFile); } string[] fileText = File.ReadAllLines(contentFile); fileText.ForEach(l => ProcessFileLine(l, installer)); installer.Filename = Path.GetFileName(contentFile); installer.Contents.Clear(); installer.Contents.Add(new Content()); installer.Contents[0].Files.Add(new ContentFile()); installer.Contents[0].Location = Path.GetDirectoryName(contentFile); installer.Contents[0].Files[0].Name = Path.GetFileName(contentFile); return; }
ProcessFileLine es una función auxiliar llamada desde el método UpdateDeploymentType para procesar cada línea de un archivo de contenido y cargar los valores en el tipo de instalador personalizado.
// Processes a line in an .rdp file to set corresponding RdpInstaller properties. private static void ProcessFileLine(string line, RdpInstaller installer) { if (string.IsNullOrEmpty(line)) { Trace.TraceInformation("Skipping line, it is empty."); return; } string[] elements = line.Split(':'); if (elements.Length < 2) { Trace.TraceError("Unexpected elements length: {0}. Skipping.", elements.Length); return; } string elementName = elements[0]; Type elementType = ParseType(elements[1]); string elementValueAsString = (elements.Length == 3) ? elements[2] : string.Empty; object elementValue = (false == string.IsNullOrEmpty(elementValueAsString)) ? Convert.ChangeType(elementValueAsString, elementType) : null; Trace.TraceInformation("Name: {0} Type: {1} Value: {2} ({3})", elementName, elementType, elementValue, elementValueAsString); if (string.IsNullOrEmpty(elementValueAsString) || null == elementValue) { Trace.TraceWarning("Could not parse element value. Skipping."); return; } switch (elementName.ToLowerInvariant()) { case "username": installer.Username = elementValueAsString; break; case "redirectprinters": installer.RedirectPrinters = (1 == (int)elementValue); break; case "redirectsmartcards": installer.RedirectSmartCards = (1 == (int)elementValue); break; case "alternate shell": installer.RemoteApplication = elementValueAsString; break; case "keyboardhook": installer.KeyboardMode = (RdpKeyboardMode)(int)elementValue; break; case "audiomode": installer.AudioMode = (RdpAudioMode)(int)elementValue; break; case "desktopheight": installer.DesktopHeight = (int)elementValue; break; case "desktopwidth": installer.DesktopWidth = (int)elementValue; break; case "full address": installer.FullAddress = elementValueAsString; string[] tokens = elementValueAsString.Split(':'); ushort port = 0; if (tokens.Length > 1) { bool canParse = ushort.TryParse(tokens[1], out port); if (false == canParse) { Trace.TraceError("Improperly formatted port. Skipping."); } installer.RemoteServerPort = port; } installer.RemoteServerName = tokens[0]; break; case "screen mode id": int screenMode = (int)elementValue; if (screenMode == 1 || screenMode == 2) { installer.FullScreen = (1 == screenMode) ? false : true; } else { Trace.TraceError("Invalid screen mode: {0}. Skipping.", screenMode); } break; default: Trace.TraceWarning("Unrecognized property: {0}. Skipping", elementName); break; } }
ParseType es una función auxiliar llamada desde la función auxiliar ProcessFileLine. La función auxiliar ParseType analiza una designación de tipo de archivo .rdp y la convierte en un tipo .NET.
// Helper Function: Parses a .rdp file type designation and converts into a .NET Type. private static Type ParseType(string type) { switch (type.ToLowerInvariant()) { case "s": return typeof(string); case "i": return typeof(int); case "b": return typeof(string); default: Trace.TraceInformation("Unrecognized type: {0}.", type); return typeof(string); } }
Espacios de nombres
Microsoft. ConfigurationManagement.ApplicationManagement
Microsoft. ConfigurationManagement.ApplicationManagement.Serialization
Ensamblados
Microsoft.ConfigurationManagement.ApplicationManagement.dll