Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用进程调用exe_C# - Fatal编程技术网

C# 使用进程调用exe

C# 使用进程调用exe,c#,C#,我正在尝试使用一些选项执行dism.exe。我得出的工作代码如下所示: Console.WriteLine("Please wait..."); if (File.Exists("iis.bat")) File.Delete("iis.bat"); using (StreamWriter sw = File.CreateText("iis.bat")) { if (File.Exists(@"C:\Windows\SysWOW64\dism.exe"))

我正在尝试使用一些选项执行dism.exe。我得出的工作代码如下所示:

Console.WriteLine("Please wait...");

if (File.Exists("iis.bat"))
    File.Delete("iis.bat");


using (StreamWriter sw = File.CreateText("iis.bat"))
{

    if (File.Exists(@"C:\Windows\SysWOW64\dism.exe"))
        sw.WriteLine(@"START /WAIT C:\Windows\SysWOW64\dism.exe /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");
    else if (File.Exists(@"C:\Windows\System32\dism.exe"))
        sw.WriteLine(@"START /WAIT C:\Windows\System32\dism.exe /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.bat", FileAttributes.Hidden);

ProcessStartInfo psi = new ProcessStartInfo("cmd.exe", "/C iis.bat")
{
    UseShellExecute = false,
    RedirectStandardOutput = true,
    RedirectStandardError = true,
};
psi.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;

Process pro = Process.Start(psi);
pro.WaitForExit();


if (File.Exists("iis.bat"))
    File.Delete("iis.bat");

Console.WriteLine("IIS is installed");
Console.WriteLine("PLEASE restart the computer once");
Thread.Sleep(5000);
然而,为了使它更优雅,我把它改为下面的代码,但它不工作

static void Main(string[] args)
{
    Console.WriteLine("Please wait...");

    ProcessStartInfo psi = new ProcessStartInfo() { UseShellExecute = false, RedirectStandardOutput = true, RedirectStandardError = true };
    psi.Arguments = @"/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";
    psi.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
    if (File.Exists(@"C:\Windows\SysWOW64\dism.exe"))
        psi.FileName = @"C:\Windows\SysWOW64\dism.exe";
    else if (File.Exists(@"C:\Windows\System32\dism.exe"))
        psi.FileName = @"C:\Windows\System32\dism.exe";

    Process pro = Process.Start(psi);
    pro.WaitForExit();

    Console.WriteLine("IIS is installed");
    Console.WriteLine("PLEASE restart the computer once");
    Thread.Sleep(5000);
}

有人能告诉我修改代码的问题吗。这条线正好穿过流程;什么也没有发生。

不是真正的答案,但允许您查看out.txt文件中的错误。我的系统创建 不能使用32位版本的DISM为运行中的64位操作系统提供服务。 请使用与计算机体系结构对应的DISM版本。错误也许对你有帮助

static void Main(string[] args)
{
    Console.WriteLine("Please wait...");

    Process pro = new Process();

    ProcessStartInfo psi = new ProcessStartInfo()
    {
        UseShellExecute = true,
        RedirectStandardOutput = false,
        RedirectStandardError = false
    };
    psi.Arguments = @"/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\" > out.txt ";
    psi.WindowStyle = System.Diagnostics.ProcessWindowStyle.Normal;
    psi.ErrorDialog = true;

    psi.FileName = "cmd.exe";

    if (!File.Exists(@"C:\Windows\SysWOW64\dism.exe"))
    {
        psi.Arguments = @"/C ""C:\Windows\SysWOW64\dism.exe " + psi.Arguments;
        psi.WorkingDirectory = @"C:\Windows\SysWOW64\";
    }
    else if (File.Exists(@"C:\Windows\System32\dism.exe"))
    {
        psi.Arguments = @"/C ""C:\Windows\System32\dism.exe " + psi.Arguments;
        psi.WorkingDirectory = @"C:\Windows\System32\";
    }

    pro.StartInfo = psi;
    pro.Start();
    pro.WaitForExit();

    Console.WriteLine("IIS is installed");
    Console.WriteLine("PLEASE restart the computer once");
    Thread.Sleep(5000);
}

您可以尝试将EnableRaisingEvents设置为true,并将错误输出重定向到控制台。您应该订阅ErrorDataReceived事件来执行此操作。因此,我们可以看到错误。请告诉我如何执行此操作。pro.EnableRaisingEvents=true;pro.ErrorDataReceived+=pro_ErrorDataReceived;在块创建void pro_ErrorDataReceivedobject发送方之后,DataReceivedEventArgs e{Console.WriteLinee.Data;}应该在Process pro=Process.Startpsi;之后吗?Process Pro=新Process PSI;然后在专业开始之前,在流程上设置他上面描述的内容;调试器从不进入pro_ErrorDataReceived,可能是因为在设置EnableRaisingEvents和ErrorDataReceived之前启动了进程