Poznámka
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Pokud chcete definovat import obsahu technologie nasazení aplikace, použijte instanci Microsoft.ConfigurationManagement.ApplicationManagement.ContentImporter
třídy . Nová instance třídy definuje import obsahu používaný instalačním programem.
Třída ContentImporter poskytuje návrh na úrovni rozhraní, kde vlastní technologie mohou vytvořit instanci a naplnit DeploymentType objekty pro konkrétní technologii. Koncept této třídy spočívá v tom, že daný importér technologie je schopen přečíst konkrétní soubor obsahu a vytvořit odpovídající objekt DeploymentType (s instalačním programem) pomocí informací získaných z obsahu. Například technologie Instalační služby systému Windows čte *.msi soubory a je schopna naplnit vlastnosti Název a Popis objektu DeploymentType a vytvořit akce Zjistit, Nainstalovat a Odinstalovat pro instalační program.
V ukázkovém projektu protokolu RDP (Remote Desktop Protocol) je pro soubory protokolu RDP (Remote Desktop Protocol) vyžadován nový import obsahu. Podpora importu obsahu pro soubory RDP není integrovaná do Configuration Manager, takže se vyžaduje vlastní import obsahu.
Základní přehled definování vlastního importu
Vytvořte vlastní instanci třídy ContentImporter.
Přepište vlastnost FileTypes a vraťte typy a přípony souborů specifické pro danou technologii.
Přepište metodu CreateDeploymentType a vytvořte vlastní typ nasazení importem požadovaných vlastností ze souboru obsahu.
Přepište metodu UpdateDeploymentType a aktualizujte vlastní typ instalačního programu nastavením ze souboru obsahu.
Pomocné funkce: Zahrnutí pro úplnost a čitelnost kódu jsou dvě pomocné funkce. ProcessFileLine je pomocná funkce volaná z metody UpdateDeploymentType ke zpracování každého řádku souboru obsahu a načtení hodnot do vlastního typu instalačního programu. ParseType je pomocná funkce volaná z pomocné funkce ProcessFileLine. Pomocná funkce ParseType analyzuje označení typu souboru .rdp a převede ho na typ .NET.
Definování vlastního importu obsahu
Vytvořte instanci
Microsoft.ConfigurationManagement.ApplicationManagement.ContentImporter
třídy pomocí konstruktoruMicrosoft.ConfigurationManagement.ApplicationManagement.ContentImporter
.Následující příklad z ukázkového projektu RDP ukazuje, jak definovat import obsahu.
// Content importer for .rdp files used by the RDP installer. public class RdpContentImporter : ContentImporter
Microsoft.ConfigurationManagement.ApplicationManagement.ContentImporter.FileTypes
Přepište vlastnost a definujte typy souborů podporované importem obsahu.Následující příklad z ukázkového projektu RDP ukazuje, jak přepsat FileTypes vlastnost.
// File types supported by the content importer. public override IList<FileType> FileTypes { get { return Common.RdpFileTypes; } }
V ukázkovém projektu RDP je hodnota FileTypes definována ve třídě Common projektu.
// 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" } } };
Přepište metodu
Microsoft.ConfigurationManagement.ApplicationManagement.ContentImporter.CreateDeploymentType
pro správu vytváření vlastního typu nasazení importem požadovaných vlastností ze souboru obsahu.Následující příklad z ukázkového projektu RDP ukazuje, jak přepsat Metodu 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; }
V ukázkovém projektu RDP je parametr řetězce pro DeploymentType definován ve třídě Common místního projektu.
// Internal ID of the technology. public const string TechnologyId = "Rdp";
Přepište metodu
Microsoft.ConfigurationManagement.ApplicationManagement.ContentImporter.UpdateDeploymentType
pro aktualizaci typu nasazení nastavením ze souboru obsahu.Následující příklad z ukázkového projektu RDP ukazuje, jak přepsat Metodu 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 je pomocná funkce volaná z metody UpdateDeploymentType ke zpracování každého řádku souboru obsahu a načtení hodnot do vlastního typu instalačního programu.
// 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 je pomocná funkce volaná z pomocné funkce ProcessFileLine. Pomocná funkce ParseType analyzuje označení typu souboru .rdp a převede ho na typ .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); } }
Obory názvů
Microsoft. ConfigurationManagement.ApplicationManagement
Microsoft. ConfigurationManagement.ApplicationManagement.Serialization
Sestavení
Microsoft.ConfigurationManagement.ApplicationManagement.dll