![](/img/trans.png)
[英]How do I execute a DOS SET command from C# and have the variable persist after the exe closes?
[英]can i execute a dos command from a C# class library?
我必須執行一個IIS模塊來阻止對沒有來自某個CA的證書的用戶的訪問。 我做了CTL證書信任列表。 我使用netsh http add sslcert 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#控制台應用程序,但在C#庫類中,無法啟動。
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();
}
}
我做錯了什么?10倍
在我的書中這種情況的第一個嫌疑人,缺乏細節,是某種路徑問題。 嘗試完全限定命令路徑,看看它是否更好。
pnet.StartInfo.FileName = Environment.SystemDirectory + @"\netsh.exe"; // or something like that
盡管如此,我會謹慎地調用外部命令的一般模式,但是既然你提供了文件名及其參數,那么它應該是一個相當安全的事情。 如果您有時間,但尚未這樣做,您可能需要查看是否有API可以執行您想要的操作。 有機會; netsh
可能不是magic
。
我做錯了什么?10倍
我會說:你沒有足夠的安全保障。 顯然IIS不會產生任何奇怪的應用程序。 您需要在配置為以具有啟動該進程的權限的用戶身份運行的應用程序池中運行它。
您可能會從Windows集成身份驗證中獲得里程數; 這樣,登錄Web服務器的用戶將隱含地確定啟動進程的權限。
也就是說,您將更好地利用本機API(ADSI,WMI?)來實現目標
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.