在AppRef CoClass 文档中,它说:
请注意,如果您的代码在 ArcGIS 应用程序进程之一中运行,则只能使用 AppRef 对象。
论坛帖子似乎确认这是违反此约束时看到的相同错误:
来自http://forums.esri.com/Thread.asp?c=93&f=1729&t=217861:
据我了解,确实无法从地理处理脚本访问 IApplication 实例。
理论上,如果您的任务是纯粹的地理处理,您应该能够在不访问 IApplication 对象的情况下完成所有任务。
看起来上述论坛帖子的 OP 能够通过“使用 IToolboxWorkspace 并直接访问 Esri 工具箱”来解决他们的问题。这是她的代码:
public IGPTool GetTool(string _sToolName, string _sToolboxName)
{
IWorkspaceFactory pGPTFact;
IToolboxWorkspace pToolboxWorkspace;
IGPToolbox pGPToolbox;
IGPTool pGPTool;
pGPTFact = new ToolboxWorkspaceFactoryClass();
pToolboxWorkspace = pGPTFact.OpenFromFile(
ArcGISInstallFolder + @"\ArcToolbox\Toolboxes", 0) as IToolboxWorkspace;
pGPToolbox = pToolboxWorkspace.OpenToolbox(_sToolboxName);
pGPTool = pGPToolbox.OpenTool(_sToolName);
return pGPTool;
}
private string ArcGISInstallFolder
{
get
{
if (string.IsNullOrEmpty(this.m_sArcGISInstallFolder))
{
Microsoft.Win32.RegistryKey regkey;
regkey = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(
@"Software\ESRI\ArcGIS", false);
this.m_sArcGISInstallFolder = regkey.GetValue("InstallDir") as String;
}
return this.m_sArcGISInstallFolder;
}
}
也许您可以在没有 AppRef 对象的情况下或通过从应用程序内部运行脚本来实现您的目标。