在asp.net中执行批处理文件时出现未知错误
本文关键字:未知 错误 批处理文件 asp net 执行 | 更新日期: 2023-09-27 18:22:18
我想在asp.net的服务器端运行一个批处理文件,我使用了以下命令来执行批处理文件。当它在调试模式下运行时,它可以正常工作,但当我托管URL并调用批处理文件时,它就不工作了。
protected void Button1_Click(对象发件人,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());
}
}
您不应该在ASP中运行批处理文件,因为当它在服务器上时,它是在ASP用户的权限下运行的(由于obihouse的原因,这是非常有限的)。
最好的办法是在asp服务器上创建一个定期运行的计划作业,检查asp页面创建或更改的文件夹或文件,然后从中触发事件。
我不完全确定你的目标,但请记住这一点-批处理将在本地机器上运行。如果您打算远程运行,我会研究Powershell。此外,您还会遇到一些权限问题。多个批处理请求将需要提升权限。否则,从C#执行批处理文件的正确方法如下:
using (Process.Start(@"C:'Batch'File'Location'AndName.bat"))
{
// Additional Requirements / Manipulation if Required.
}
这样,一旦批处理完成,它将实际处置资源。另一种选择是尝试使用提升的权限执行批处理。正如我之前所说,您真的应该使用Powershell,因为它可以访问Windows管理接口(WMI)。
此外,如果您确信整个批次,那么您确实希望确保对权限进行彻底测试。否则,您可能会遇到大错误-因此,熟悉用户访问控制,并确保客户端可以调用服务在给定的机器上运行批处理。请注意,如果你的数据格式不正确,你会暴露出潜在的安全问题——因为你可能允许某人更改请求以运行恶意的提升脚本。
希望这至少能有所帮助。