Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/9.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#类库执行dos命令吗?_C#_Class_Iis_Module - Fatal编程技术网

我可以从C#类库执行dos命令吗?

我可以从C#类库执行dos命令吗?,c#,class,iis,module,C#,Class,Iis,Module,我必须做一个IIS模块,阻止没有特定CA证书的用户访问。 我做了一个CTL证书信任列表。我使用netshhttpaddsslcert-ip测试了它。。。。它是有效的。 现在我要做的就是在c#类库中实现netsh的调用。 我试图使用: Process pnet = new Process(); pnet.StartInfo.FileName = "netsh"; pnet.StartInfo.Arguments = "http delete sslc

我必须做一个IIS模块,阻止没有特定CA证书的用户访问。 我做了一个CTL证书信任列表。我使用netshhttpaddsslcert-ip测试了它。。。。它是有效的。 现在我要做的就是在c#类库中实现netsh的调用。 我试图使用:

        Process pnet = new Process();
        pnet.StartInfo.FileName = "netsh";
        pnet.StartInfo.Arguments = "http delete sslcert ipport=0.0.0.0:443";
        pnet.StartInfo.UseShellExecute = false;
        pnet.StartInfo.CreateNoWindow = true;
        pnet.Start();
        pnet.Close();
这在C#console应用程序中有效,但在C#library类中不会启动

       namespace IISproject
       {
       public class MyModule : IHttpModule
       {
       #region IHttpModule Members
       public void Dispose()
       { 
       }
       public void Init(HttpApplication context)
       {
       context.PreRequestHandlerExecute += new EventHandler(OnPreRequestHandlerExecute);
    }
    #endregion
    public void OnPreRequestHandlerExecute(Object source, EventArgs e)
    {
        HttpApplication app = (HttpApplication)source;
        HttpRequest request = app.Context.Request;
        if (!String.IsNullOrEmpty(request.Headers["Referer"]))
        {
            throw new HttpException(403,
                                                    "Uh-uh!");
        }
        Process pnet = new Process();
        pnet.StartInfo.FileName = "netsh";
        pnet.StartInfo.Arguments = "http delete sslcert ipport=0.0.0.0:443";
        pnet.StartInfo.UseShellExecute = false;
        pnet.StartInfo.CreateNoWindow = true;
        pnet.Start();
        pnet.Close(); 
    }
}

我做错了什么?10x

在我的书中,这种情况的第一个嫌疑犯,缺乏细节,是某种路径问题。尝试完全限定命令路径,看看它是否工作得更好

pnet.StartInfo.FileName = Environment.SystemDirectory + @"\netsh.exe"; // or something like that
不过,我会对以这种方式调用外部命令的一般模式保持谨慎,但由于您同时提供了文件名及其参数,因此这样做应该是相当安全的。如果您有时间,而且还没有这样做,那么您可能需要研究一下是否有一个API来实现您想要的功能。机会是有的
netsh
可能不是
magic

我做错了什么?10倍

我会说:你不够关心安全。 显然,IIS不会产生任何奇怪的应用程序。您需要在配置为以具有启动该进程权限的用户身份运行的应用程序池中运行它

您可能会从windows集成身份验证中获益;这样,登录到web服务器的用户将隐式地确定启动进程的权限


也就是说,使用本机API(ADSI、WMI?)来实现目标会更好。

“不启动”:您会遇到任何错误吗?(也许可以看事件日志?)。请注意,控制台应用程序将在您的帐户下运行,而aspnet则在低权限帐户下运行—这可能是您的问题。对于ideas人员,这是10倍。我发现了问题。首先,我使用命令netshhttpshowsclcert测试了一个c#console应用程序。为此,您不需要管理员权限,但对于delete命令,您需要管理员权限。谢谢你,谢了。因此,现在我需要找到一种从c#代码在管理模式下运行CMD.exe的方法。我搜索了一下,找到了runas命令。但它不太适合我,因为它将打开另一个cmd.exe窗口。如果你们有什么想法,请告诉我。我无法搜索其他API,这是我需要完成的任务。10倍。请查看windows安全性:
模拟
。有一篇文章的代码和报告良好的链接+良好的结果