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方式
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);
这样就没有服务器端和本地运行系统的差异了。发布之后,测试可行。哈哈
word.Quit();
System.Runtime.InteropServices.Marshal.ReleaseComObject(doc);
System.Runtime.InteropServices.Marshal.ReleaseComObject(word);
这样就没有服务器端和本地运行系统的差异了。发布之后,测试可行。哈哈
#6
忘加最重要的步骤了!
GC.Collect();
GC.WaitForPendingFinalizers();
垃圾回收
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方式
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);
这样就没有服务器端和本地运行系统的差异了。发布之后,测试可行。哈哈
word.Quit();
System.Runtime.InteropServices.Marshal.ReleaseComObject(doc);
System.Runtime.InteropServices.Marshal.ReleaseComObject(word);
这样就没有服务器端和本地运行系统的差异了。发布之后,测试可行。哈哈
#6
忘加最重要的步骤了!
GC.Collect();
GC.WaitForPendingFinalizers();
垃圾回收
GC.Collect();
GC.WaitForPendingFinalizers();
垃圾回收