我想在asp.net的服务器端运行批处理文件,我使用以下命令执行批处理文件。它在调试模式下运行时工作正常,但是当我托管URL并调用批处理文件时,它无效。
protected void Button1_Click(object sender,EventArgs e) {
try
{
if (FileUpload1.FileName == "")
{
Label1.Visible = true;
Label1.Text = "Browse Respective text file";
return;
}
if ((File.Exists(Server.MapPath("~/DND_BASE/" + FileUpload1.FileName))) == true)
{
Label1.Visible = true;
Label1.Text = "File Name already Uploaded";
return;
}
else
{
string DestFilepath = @"D:\124_SMS_DATA\124_SMS_Base\"+FileUpload1.FileName;
string SrcFilepath = Server.MapPath("~/DND_BASE/") + FileUpload1.FileName;
FileUpload1.SaveAs(System.IO.Path.Combine(Server.MapPath("~/DND_BASE/"), FileUpload1.FileName));
if (File.Exists(DestFilepath))
{
File.Delete(DestFilepath);
}
File.Move(SrcFilepath, DestFilepath);
Label5.Visible = true;
Label5.Text = "File Uploaded Successfully You can download file after 5 Mins";
string path = Server.MapPath(".") + "\\test.bat";
System.Diagnostics.Process.Start(path);
}
}
catch(Exception ex)
{
err = new ErrorHandler();
err.WriteToErrorLog(ex.Message.ToString());
}
}
答案 0 :(得分:1)
您不应该在ASP中运行批处理文件,因为它在ASP用户的服务器上的权限下运行(出于对象原因非常有限)。
最好的办法是在经常运行的asp服务器上创建一个预定作业,并检查ASP页面创建或更改的文件夹或文件,然后从中触发事件。
答案 1 :(得分:0)
我不完全确定您的目标,但请记住这一点 - 批次将在本地计算机上运行。如果您打算远程运行,我会查看 Powershell 。此外,您将遇到几个权限问题。多个批请求需要提升权限。否则,从C#执行批处理文件的正确方法是这样的:
using (Process.Start(@"C:\Batch\File\Location\AndName.bat"))
{
// Additional Requirements / Manipulation if Required.
}
这样,一旦批次完成,它就会处理资源。另一种方法是尝试使用提升的权限执行批处理。正如我之前所说,你真的应该使用 Powershell ,因为它可以访问 Windows管理界面(WMI)。
此外,如果您确定整个批次,那么您真的要确保非常彻底地测试权限。否则,您可能会遇到大错误 - 熟悉用户访问控制,并确保客户端可以调用服务来运行批量到您的给定机器。请注意,如果您的数据格式错误,则会暴露潜在的安全问题 - 因为您可能允许某人更改运行恶意提升脚本的请求。
希望至少有帮助。