gisoralce在博客园发布了一个mxd检查工具,主要功能是将arcgis的mxd数据源有效性(含矢量和影像)检查、检查是否为相对路径,自动保存为相对路径。

这是一个未加壳的.NET程序,正好拿来练习,但无意侵犯gisoralce,望见谅!

首先使用dotPeek直接打开Mxdcheck.exe

右键导出为VS项目文件:

由于VS版本的问题(测试使用VS2010),需要进行自动转换

问题一:警告:设计器无法处理AutoScaleMode.Font

打开主界面,出现警告"设计器无法处理第 248 行的代码:this.AutoScaleMode = AutoScaleMode.Font;方法"InitializeComponent"内的代码由设计器生成,不应手动修改。请移除任何更改,然后尝试重新打开设计器。

处理方法是,在前面添加完整引用,必须只能这样,不知道为什么。

问题二:变量"groupBox1"未声明或从未赋值

再打开界面,又警告:变量"groupBox1"未声明或从未赋值。

而转到定义发现定义过,不知道为什么!没办法报着尝试心理,我把groupBox1全部替换成groupBox3(因为已存在groupBox2),居然还可以了,没有任何警告了!

终于可以看到界面了……

问题三:ArcGIS product not specified

调用运行,出现了老问题,未进行Runtime绑定

在代码主函数中加一句:

ESRI.ArcGIS.RuntimeManager.Bind(ESRI.ArcGIS.ProductCode.EngineOrDesktop);

问题四:80040154

这是因为测试电脑是64位系统,需要将项目属性中,目标平台改为x86

问题五:所有都找不到数据源

终于可以正常运行和检查了。这个界面还是有点不美观,我自己写了一个界面,但运行检查所有的图层都找不到数据源!!明明是一样的代码,真是比较诡异!

原来是忘记了最重要的一步,没有进行权限许可:

IAoInitialize m_AoInitialize = new AoInitializeClass();

esriLicenseStatus licenseStatus = esriLicenseStatus.esriLicenseUnavailable;

licenseStatus = m_AoInitialize.Initialize(esriLicenseProductCode.esriLicenseProductCodeAdvanced);

终于搞定了。

核心函数:

        private void Checkonemxd(string mxdFile)
{
//1.打开文档
IMapDocument document = new MapDocumentClass();
document.Open(mxdFile, ""); //2.检查路径
if (this.ckbSave.Checked && !document.UsesRelativePaths)
{
this.rtbLog.Text = this.rtbLog.Text + "相对路径:" + mxdFile + "\n";
document.Save(true, true);
} //3.检查数据源
int num = document.MapCount;
for (int i = 0; i < num; i++)
{
IEnumLayer layers = document.get_Map(i).get_Layers(null, true);
layers.Reset();
ILayer layer;
while ((layer = layers.Next()) != null)
{
//string text;
if (layer is IFeatureLayer)
{
IFeatureLayer pFeatureLayer = layer as IFeatureLayer;
if (pFeatureLayer.FeatureClass == null)
{
RichTextBoxEx expr_C8 = this.rtbLog;
string text = expr_C8.Text;
expr_C8.Text = string.Concat(new string[]
{
text,"文件:",mxdFile,"的图层:", layer.Name,",找不到矢量数据源\n"
});
}
}
else if (layer is IRasterLayer)
{
IRasterLayer pFeatureLayer2 = layer as IRasterLayer;
if (pFeatureLayer2.Raster == null)
{
RichTextBoxEx expr_154 = this.rtbLog;
string text = expr_154.Text;
expr_154.Text = string.Concat(new string[]
{
text,"文件:",mxdFile,"的图层:",layer.Name,",找不到影像数据源\n"
});
text = this.rtbLog.Text;
this.rtbLog.Text = text + "文件:" + mxdFile + "的图层:" + layer.Name + ",找不到影像数据源\n";
}
}
}
} //4.关闭文档
document.Close();
document = null;
}

  

反编译示例:mxd检查的更多相关文章

  1. apk反编译(6)ProGuard 工具 android studio版官方教程[作用,配置,解混淆,优化示例]

    ProGuard In this document Enabling ProGuard (Gradle Builds) Configuring ProGuard Examples Decoding O ...

  2. .NET反编译之Reflector基础示例

    这几日由于公司需要, 看了些.NET反编译技巧,特地和大家分享下 .NET反编译工具很多,Reflector是其中一个很优秀的工具,所以就用它来进行反编译工作了.今天我们就用"繁星代码生成器 ...

  3. Java反编译代码对齐

    使用反编译的代码作为jar包源码进行调试时,经常会遇到的情况是反编译后的源码之在注释里包含行号,但是与代码所在行经常对应不上.这个时候,就有必要对代码进行对齐了. ​ public class Reo ...

  4. C#防止反编译

    http://blog.csdn.net/wangpei421/article/details/42393095 http://www.cnblogs.com/tianguook/archive/20 ...

  5. Android反编译(三)之重签名

    Android反编译(三) 之重签名 [目录] 1.原理 2.工具与准备工作 3.操作步骤 4.装X技巧 5.问题 1.原理 1).APK签名的要点 a.所有的应用程序都必须有数字证书 ,Androi ...

  6. Android反编译(二)之反编译XML资源文件

    Android反编译(二) 之反编译XML资源文件 [目录] 1.工具 2.反编译步骤 3.重新编译APK 4.实例 5.装X技巧 6.学习总结 1.工具 1).反编译工具  apktool http ...

  7. 转载文章----IL反编译利器——Ildasm.exe和Reflector.exe:

    转载地址:http://www.cnblogs.com/yangmingming/archive/2010/02/03/1662546.html 一:Ildasm.exe简介  这一微软VS自带工具, ...

  8. 转载文章----初识Ildasm.exe——IL反编译的实用工具

    转载地址http://www.cnblogs.com/yangmingming/archive/2010/02/03/1662307.html Ildasm.exe 概要:(路径:C:\Program ...

  9. DotNet 资源大全中文版,内容包括:编译器、压缩、应用框架、应用模板、加密、数据库、反编译、IDE、日志、风格指南等

    DotNet 资源大全中文版 我想很多程序员应该记得 GitHub 上有一个 Awesome - XXX 系列的资源整理.awesome-dotnet 是由 quozd 发起和维护.内容包括:编译器. ...

随机推荐

  1. 欧拉回路 uoj117

    写了一道欧拉回路的模板题.先判断是否是欧拉回路,有向图和无向图有一点点不同,然后就是特判独立点的存在. 之后是输出路径,和dls学的dfs,利用last数组的更新可以做到线性的复杂度,否则一不小心就会 ...

  2. 「ZJOI2017」仙人掌

    「ZJOI2017」仙人掌 题目大意: 给定一张无向联通图,求有多少种本质不同的不加重边的加边方案使得新图是个仙人掌. 解题思路: 如果原来的图不是仙人掌,那么答案就是 \(0\) ,否则求出这个仙人 ...

  3. 埃及分数 a* 搜索 知识点mark

    题意 在古埃及,人们使用单位分数的和(即1/a,a是自然数)表示一切有理 数. 例如,2/3=1/2+1/6,但不允许2/3=1/3+1/3,因为在加数中不允许有相同的. 对于一个分数a/b,表示方法 ...

  4. 【20181027T2】易水决【贪心+堆】

    原题:loj6035 [错解] 全肝T1了没怎么想 [正解] 一眼贪心 先考虑\(b_i=0\)怎么做 可以模拟一个正常人的思维 开一个堆,记录每个任务需要的时间(包括等待),每次从中取出一个任务,表 ...

  5. 【期望DP】BZOJ2134- 单选错位

    [题目大意] 有n道题,第i道题有ai个选项.一个人把所有的正确答案填到了后面一题上(特殊的,当i=n的时候填到1上),问他期望做对几道题? [思路] 沙茶题……显然每道题的期望是独立的. 对于某道题 ...

  6. bzoj 1009 DP 矩阵优化

    原来的DP: dp[i][j]表示长度为i的合法串,并且它的长度为j的后缀是给定串的长度为j的前缀. 转移: i==0 dp[0][0] = 1 dp[0][1~m-1] = 0 i>=1 dp ...

  7. 2015编程之美 初赛第一场C题 质数相关 二分图的最大匹配

    质数相关 Time Limit: 1 Sec  Memory Limit: 256 MB 题目连接 http://hihocoder.com/contest/msbop2015round2a/prob ...

  8. Swift 闭包反向传值

    Swift中闭包反向传值 1.第二控制器申明一个闭包类型 typealias BackBlock = (String) -> Void 2.第二控制器定义一个变量 var BackBlockCl ...

  9. iOS 反反注入 修改__RESTRICT,__restrict工具

    通过在 Xcode 里的 Other Linker Flags 设置参数,可以防止App被注入dylib(仅限于iOS 10 以下系统)  比如,某艺,XX音乐等 dylib无法注入,也就意味着没办法 ...

  10. linux基础命令学习 (八)磁盘空间

    一.df linux中df命令的功能是用来检查linux服务器的文件系统的磁盘空间占用情况.于du不同的是,du是面向文件的命令,只计算被文件占用的空间.不计算文件系统metadata 占用的空间.d ...