再次感谢大家的耐心等待。现在让我看看我是否可以阐明问题,因为这已经成为我必须解决的主要错误。
这是一个完全自动化的项目,不允许任何用户与它进行交互。唯一的例外是我是主要开发人员,我只在它停滞不前时才搞砸它。基本上,Apache+php(XAMPP)监听来自网络的请求。收到一个后,我的项目的主要.exe从php程序启动。所有这些都运作良好。最终,调用 AutoCAD 以生成图形。 因此,我用来启动AutoCAD的代码是:
- using System;
- using AutoCAD;
- namespace AHD_BOM_CALCS
- {
- class LaunchAutoCAD
- {
- private static IAcadApplication vAcadApp = null;
- private static IAcadDocument vAcadDoc = null;
- // CHANGE THIS TO AutoCAD.Application.20 FOR ACAD 2015/16
- private static string vAcadID = "AutoCAD.Application.20";
- private static string LispPath = @"C:/Engineering/04VLISP/ANGLE/Bomber/";
- private static string DwgPath = @"C:\Engineering\09Automated Drawings";
-
- public static void StartAutoCAD()
- {
- try
- {
- // Check for instance of AutoCAD
- vAcadApp = (IAcadApplication)System.Runtime.InteropServices.Marshal.GetActiveObject(vAcadID);
- }
- catch (Exception) // If none found start a new instance of AutoCAD
- {
- System.Type AcadProg = System.Type.GetTypeFromProgID(vAcadID);
- vAcadApp = (IAcadApplication)System.Activator.CreateInstance(AcadProg);
- }
- string titleblock = "Template1(Automated).dwg";
- if (vAcadApp != null)
- {
- vAcadApp.Visible = true;
- vAcadDoc = vAcadApp.Documents.Open(DwgPath + titleblock, true);
- string LispName = "Bomber.lsp";
- vAcadDoc.SendCommand("(load "" + LispPath + LispName + "" "The load failed") ");
- vAcadDoc.SendCommand(LISPVariables.PrepareAcadCmd() + " ");
- vAcadDoc.SendCommand("(setvar "osmode" 703) ");
- vAcadDoc.SendCommand("(setvar "cmdecho" 1) ");
- vAcadDoc.SendCommand("(setvar "pickbox" 5) ");
-
- vAcadDoc.SendCommand("(setq svPath "C:/0/Misc/BomberDevDwgs/") ");
- vAcadDoc.SendCommand("(setq *erp 1) ");
- vAcadDoc.SendCommand("DrawitNow ");
- }
- else
- {
- Console.WriteLine("ERROR: The drawing file is missing.");
- Console.ReadKey();
- }
- }
- }
- }
在运行此类之前,C#项目会执行一堆计算并将这些结果写入Oracle数据库。所有这些部分都运行良好,从来都不是问题。只有当LaunchAutoCAD类到达SendCommand行时,事情才会向南发展。而且它似乎永远不会在同一条线上失败。有时没有一个命令去,有时其中2或3个去,但后来它停滞了,从来没有得到最后一个命令,即启动LISP代码的“Drawit”。图形随即生成并保存到服务器。它昼夜不停地运行,监听请求。在每天的100多次跑步中,大约有5-10次停滞不前。我已经检查了运行此项目的工作站,并且似乎没有像任务管理器中卡住的acad.exe进程或其他任何东西。我已经冷启动它,看看这是否会清除蜘蛛网,但这没有帮助。正如老话所说,如果可行,我准备在火花塞上小便。 |