我有一个dism.exe命令在Windows Server 2008上安装IIS,我试图以编程方式执行该命令。无法执行命令
Console.WriteLine("Installing IIS...");
if (File.Exists("iis.cmd"))
File.Delete("iis.cmd");
using (StreamWriter sw = File.CreateText("iis.cmd"))
{ sw.WriteLine(@"START /WAIT DISM /Online /Enable-Feature /FeatureName:IIS-ApplicationDevelopment /FeatureName:IIS-ASP /FeatureName:IIS-ASPNET /FeatureName:IIS-BasicAuthentication /FeatureName:IIS-CGI /FeatureName:IIS-ClientCertificateMappingAuthentication /FeatureName:IIS-CommonHttpFeatures /FeatureName:IIS-CustomLogging /FeatureName:IIS-DefaultDocument /FeatureName:IIS-DigestAuthentication /FeatureName:IIS-DirectoryBrowsing /FeatureName:IIS-FTPExtensibility /FeatureName:IIS-FTPServer /FeatureName:IIS-FTPSvc /FeatureName:IIS-HealthAndDiagnostics /FeatureName:IIS-HostableWebCore /FeatureName:IIS-HttpCompressionDynamic /FeatureName:IIS-HttpCompressionStatic /FeatureName:IIS-HttpErrors /FeatureName:IIS-HttpLogging /FeatureName:IIS-HttpRedirect /FeatureName:IIS-HttpTracing /FeatureName:IIS-IIS6ManagementCompatibility /FeatureName:IIS-IISCertificateMappingAuthentication /FeatureName:IIS-IPSecurity /FeatureName:IIS-ISAPIExtensions /FeatureName:IIS-ISAPIFilter /FeatureName:IIS-LegacyScripts /FeatureName:IIS-LegacySnapIn /FeatureName:IIS-LoggingLibraries /FeatureName:IIS-ManagementConsole /FeatureName:IIS-ManagementScriptingTools /FeatureName:IIS-ManagementService /FeatureName:IIS-Metabase /FeatureName:IIS-NetFxExtensibility /FeatureName:IIS-ODBCLogging /FeatureName:IIS-Performance /FeatureName:IIS-RequestFiltering /FeatureName:IIS-RequestMonitor /FeatureName:IIS-Security /FeatureName:IIS-ServerSideIncludes /FeatureName:IIS-StaticContent /FeatureName:IIS-URLAuthorization /FeatureName:IIS-WebDAV /FeatureName:IIS-WebServer /FeatureName:IIS-WebServerManagementTools /FeatureName:IIS-WebServerRole /FeatureName:IIS-WindowsAuthentication /FeatureName:IIS-WMICompatibility /FeatureName:WAS-ConfigurationAPI /FeatureName:WAS-NetFxEnvironment /FeatureName:WAS-ProcessModel /FeatureName:WAS-WindowsActivationService"); }
File.SetAttributes("iis.cmd", FileAttributes.Hidden);
ProcessStartInfo psi = new ProcessStartInfo(@"iis.cmd")
{
UseShellExecute = false,
RedirectStandardOutput = true,
RedirectStandardError = true
};
Process pro = Process.Start(psi);
pro.WaitForExit();
if (File.Exists("iis.cmd"))
File.Delete("iis.cmd");
Console.WriteLine("IIS is installed");
Console.WriteLine("Exiting...");
Thread.Sleep(5000);
问题是此代码无法安装IIS。我可以看到一个空白的窗口并立即消失。 当我手动打开cmd文件时,该命令运行正常,安装IIS。
编辑: 我只是试过下面的改变,它仍然无法正常工作!我能看到的只有一个空白窗口(dism.exe)弹出窗口,并以秒为单位完成。
我想你错过了'.Flush()'部分。尝试在'WriteLine'之后添加'sw.Flush()'。也许我只是错了,但试试看吧。当手动检查'iis.cmd'时命令是否正确? – Kimmax
@Kimmax - yse,你只是错了 - 注意在代码中使用''。 –
我相信这可能与用户的权限/特权有关。也许你没有在高架模式下运行? –