2010-10-20 68 views
1

我有一个程序可以对某些图形执行批处理。当我尝试打开它时,其中一张图会引发一个异常“解密数据错误”。此图形特别是由AutoCAD以外的第三方工具生成的。此外,此问题仅在AutoCAD 2011中出现。在AutoCAD 2010中,它会提示用户该文件是在AutoCAD外部生成的,但它们可以单击并且该批次将继续。我已经尝试使用托管的.NET API和COM Interop API打开它,但都给出相同的错误。打开图形时出现异常“错误Decrpyting数据”

这里是从AutoCAD formus后,虽然它并没有给我提供了一个解决方案:

http://forums.autodesk.com/t5/NET/Error-Decrypting-Data-Acad-2011/td-p/2661762/highlight/true

托管API

string drawingFilePath = @"C:\Drawings\MyDrawing.dwg"; 
Application.DocumentManager.Open(drawingFilePath, false); 

COM互操作

string drawingFilePath = @"C:\Drawings\MyDrawing.dwg"; 
Object comAutoCAD = Application.AcadApplication; 
Object comDocuments = comAutoCAD.GetType().InvokeMember("Documents", BindingFlags.GetProperty, null, comAutoCAD, new object[] { }); 

Object comDocument = comDocuments.GetType().InvokeMember("Open", BindingFlags.InvokeMethod, null, comDocuments, 
    new object[] { drawingFilePath, false, Type.Missing }); 
Document.FromAcadDocument(comDocument); 
+0

后进一步测试,我发现只是修改通过与Database.ReadDwgFile方法打开数据库不会引发任何错误的图纸,我可以做我的操作很好。但是,它只适用于这个特定的绘图,因为我不需要对它做任何需要打开文件的操作。 – skeletank 2010-10-21 14:27:52

回答

1

来自AutoCAD论坛的人发布了一个适合我的答案。

http://forums.autodesk.com/t5/NET/Error-Decrypting-Data-Acad-2011/td-p/2661762/page/2

下面是一个例子:

const string systemVar_DwgCheck = "DWGCHECK"; 
Int16 dwgCheckPrevious = (Int16)Application.GetSystemVariable(systemVar_DwgCheck); 
Application.SetSystemVariable(systemVar_DwgCheck, 2); 

Document document = Application.DocumentManager.Open(@"C:\Drawings\MyDrawing.dwg", false); 
// Do stuff... 

Application.SetSystemVariable(systemVar_DwgCheck, dwgCheckPrevious);