我有一个收集系统信息的C#程序。所有这些都是对xml文件的完整注释。我已经将System version, IE version and Regedit版本传递给了“into”和“string”。现在,我遇到的问题是将输出写入两个文件:
Sys_info.xml -由IIS安装程序programunattend.xml生成的系统信息,它使用来自程序的变量。
IIS unattended.xml在这里找到:http://learn.iis.net/page.aspx/133/using-unattended-setup-to-install-iis/
可悲的是,我不是程序员,写这篇文章的人正在度假。
无论如何,这里是unattended.xml的xml代码:
<?xml version="1.0" ?>
<unattend xmlns="urn:schemas-microsoft-com:unattend"
xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State">
<servicing>
<!-- Install a selectable update in a package that is in the Windows Foundation namespace -->
<package action="configure">
<assemblyIdentity
name="Microsoft-Windows-Foundation-Package"
version="6.0.5308.6" ***reg version int from registry goes here(from my program)***
language="neutral"
processorArchitecture="x86" **** Processor architecture goes here(from my program)****
publicKeyToken="31bf3856ad364e35"
versionScope="nonSxS"
/>
<selection name="IIS-WebServerRole" state="true"/>
<selection name="IIS-WebServer" state="true"/>
<selection name="IIS-CommonHttpFeatures" state="true"/>
<selection name="IIS-StaticContent" state="true"/>
<selection name="IIS-DefaultDocument" state="true"/>
<selection name="IIS-DirectoryBrowsing" state="true"/>
<selection name="IIS-HttpErrors" state="true"/>
<selection name="IIS-HttpRedirect" state="true"/>
<selection name="IIS-ApplicationDevelopment" state="true"/>
<selection name="IIS-ASPNET" state="true"/>
<selection name="IIS-NetFxExtensibility" state="true"/>
<selection name="IIS-ASP" state="true"/>
<selection name="IIS-CGI" state="true"/>
<selection name="IIS-ISAPIExtensions" state="true"/>
<selection name="IIS-ISAPIFilter" state="true"/>
<selection name="IIS-ServerSideIncludes" state="true"/>
<selection name="IIS-HealthAndDiagnostics" state="true"/>
<selection name="IIS-HttpLogging" state="true"/>
<selection name="IIS-LoggingLibraries" state="true"/>
<selection name="IIS-RequestMonitor" state="true"/>
<selection name="IIS-HttpTracing" state="true"/>
<selection name="IIS-CustomLogging" state="true"/>
<selection name="IIS-ODBCLogging" state="true"/>
<selection name="IIS-Security" state="true"/>
<selection name="IIS-BasicAuthentication" state="true"/>
<selection name="IIS-WindowsAuthentication" state="true"/>
<selection name="IIS-DigestAuthentication" state="true"/>
<selection name="IIS-ClientCertificateMappingAuthentication" state="true"/>
<selection name="IIS-IISCertificateMappingAuthentication" state="true"/>
<selection name="IIS-URLAuthorization" state="true"/>
<selection name="IIS-RequestFiltering" state="true"/>
<selection name="IIS-IPSecurity" state="true"/>
<selection name="IIS-Performance" state="true"/>
<selection name="IIS-HttpCompressionStatic" state="true"/>
<selection name="IIS-HttpCompressionDynamic" state="true"/>
<selection name="IIS-WebServerManagementTools" state="true"/>
<selection name="IIS-ManagementConsole" state="true"/>
<selection name="IIS-ManagementScriptingTools" state="true"/>
<selection name="IIS-ManagementService" state="true"/>
<selection name="IIS-IIS6ManagementCompatibility" state="true"/>
<selection name="IIS-Metabase" state="true"/>
<selection name="IIS-WMICompatibility" state="true"/>
<selection name="IIS-LegacyScripts" state="true"/>
<selection name="IIS-LegacySnapIn" state="true"/>
<selection name="IIS-FTPPublishingService" state="true"/>
<selection name="IIS-FTPServer" state="true"/>
<selection name="IIS-FTPManagement" state="true"/>
<selection name="WAS-WindowsActivationService" state="true"/>
<selection name="WAS-ProcessModel" state="true"/>
<selection name="WAS-NetFxEnvironment" state="true"/>
<selection name="WAS-ConfigurationAPI" state="true"/>
</package>
</servicing>
</unattend>发布于 2012-03-17 04:19:59
这是你能做的最便宜的事情。
StringBuilder sb = new StringBuilder();
sb.Append("<?xml version=\'1.0\' ?>");
sb.Append("<unattend xmlns='urn:schemas-microsoft-com:unattend' xmlns:wcm='http://schemas.microsoft.com/WMIConfig/2002/State'>");
sb.Append("<servicing>");
sb.Append("<package action='configure'>");
sb.Append(" <assemblyIdentity");
sb.Append(" name='Microsoft-Windows-Foundation-Package'");
sb.Append(" version='6.0.5308.6' ");
sb.Append(" language='neutral'");
sb.Append(" processorArchitecture='x86' ");
sb.Append(" publicKeyToken='31bf3856ad364e35'");
sb.Append(" versionScope='nonSxS'");
sb.Append(" />");
foreach(var kvp in dictionaryOfValues)
{
sb.AppendFormat("<selection name='{0}' state='{1}'/>", kvp.Key, kvp.Value);
}
sb.Append("</package>");
sb.Append("</servicing>");
sb.Append("</unattend>");
// Write the string to a file.
System.IO.StreamWriter file = new System.IO.StreamWriter("c:\\test.xml");
file.WriteLine(sb.ToString);
file.Close();当然,您可以将其解析为XmlReaders和XmlWriters,但是如果您想要完成这项工作而不需要学习很多知识,那么这段代码应该可以帮助您摆脱麻烦。它假设您有一个用于选择标记的键值字典。如果没有,那么只需为每一行添加一行,并使用附加格式将正确的值插入其中。
当孩子们星期一进来的时候,他们会帮你打扫干净的:)
https://stackoverflow.com/questions/9544213
复制相似问题