c# b/s结构调用并执行服务器端批处理程序的问题

时间:2021-11-17 23:07:58
昨天遇到个问题,我想在执行完一段程序之后调用服务器端的批处理来结束服务器端开的某个进程。在本地测试的时候是可以的。但是发布到服务器端执行之后,就是调用不到批处理程序。而且有异常机制也捕获不到相应的异常信息。有人遇到过这样的问题吗?

6 个解决方案

#1


你先确认批处理(cmd)有没有开起来?
然后再确认是开起来了没能杀掉还是出错,有可能是权限不够

#2


直接用ashx做也可以,不一定要批处理

#3


嗯,在本地是可以弹出DOC窗口的。我也觉的是权限的问题,但是我把服务器上的对应文件夹以及文件全部设置了。还是不可以!然后你说应ashx来关闭服务器端的金城吗?能说一下具体思路吗?

#4


如果权限足够是可以的,但是默认情况下asp.net是以网络服务部署的,你把IIS应用程序池配置成“本地系统”服务(以System用户运行),然后在程序中查杀
System.Diagnostics.Process.GetProcessesByName(进程名).ToList().ForEach(p => p.Kill());

但那样会给你的站点带来安全隐患
暂时想到一种办法,你另开发简单的windows service以本地服务部署
然后在asp.net中用ashx向这个服务发送命令
var service = new ServiceController(服务名);
try
{
    service.ExecuteCommand(command);    //向指定服务发送指定命令,命令代码须大于128
}

在服务中的OnCustomCommand(int command)事件处理中捃
System.Diagnostics.Process.GetProcessesByName(进程名).ToList().ForEach(p => p.Kill());
或者其他IPC方式

#5


非常感谢楼上热心朋友解惑答疑。我现在另外查到一个方法,使用垃圾回收机制。                    doc.Close(oMissing, oMissing, oMissing);
word.Quit();
System.Runtime.InteropServices.Marshal.ReleaseComObject(doc);
System.Runtime.InteropServices.Marshal.ReleaseComObject(word);
这样就没有服务器端和本地运行系统的差异了。发布之后,测试可行。哈哈

#6


忘加最重要的步骤了!
GC.Collect();
GC.WaitForPendingFinalizers();
垃圾回收

#1


你先确认批处理(cmd)有没有开起来?
然后再确认是开起来了没能杀掉还是出错,有可能是权限不够

#2


直接用ashx做也可以,不一定要批处理

#3


嗯,在本地是可以弹出DOC窗口的。我也觉的是权限的问题,但是我把服务器上的对应文件夹以及文件全部设置了。还是不可以!然后你说应ashx来关闭服务器端的金城吗?能说一下具体思路吗?

#4


如果权限足够是可以的,但是默认情况下asp.net是以网络服务部署的,你把IIS应用程序池配置成“本地系统”服务(以System用户运行),然后在程序中查杀
System.Diagnostics.Process.GetProcessesByName(进程名).ToList().ForEach(p => p.Kill());

但那样会给你的站点带来安全隐患
暂时想到一种办法,你另开发简单的windows service以本地服务部署
然后在asp.net中用ashx向这个服务发送命令
var service = new ServiceController(服务名);
try
{
    service.ExecuteCommand(command);    //向指定服务发送指定命令,命令代码须大于128
}

在服务中的OnCustomCommand(int command)事件处理中捃
System.Diagnostics.Process.GetProcessesByName(进程名).ToList().ForEach(p => p.Kill());
或者其他IPC方式

#5


非常感谢楼上热心朋友解惑答疑。我现在另外查到一个方法,使用垃圾回收机制。                    doc.Close(oMissing, oMissing, oMissing);
word.Quit();
System.Runtime.InteropServices.Marshal.ReleaseComObject(doc);
System.Runtime.InteropServices.Marshal.ReleaseComObject(word);
这样就没有服务器端和本地运行系统的差异了。发布之后,测试可行。哈哈

#6


忘加最重要的步骤了!
GC.Collect();
GC.WaitForPendingFinalizers();
垃圾回收