I have an ArcGIS Pro core host application that happily connects to a file GDB
targetGeodatabase = new Geodatabase(new FileGeodatabaseConnectionPath(new Uri(this.gdbTargetConnrection, UriKind.Absolute)));
, BUT as soon as I switch to connect to a enterprise geodatabase .sde file
targetGeodatabase = new Geodatabase(new DatabaseConnectionFile(new Uri(this.gdbTargetConnrection, UriKind.Absolute)));
where this.gdbTargetConnrection = ‘C:\DeleteMe\SDE\xx@xxxxxxx.sde’ an Oracle 11g geodatabase
I get the following error:
ArcGIS.Core.Data.GeodatabaseEnterpriseException: The gsrvr dll for a direct connection could not be loaded. ---> System.Runtime.InteropServices.COMException: Exception from HRESULT: 0x80050144
at ArcGIS.Core.Internal.IGeodatabaseIOP.Geodatabase_OpenFromEnterpriseGeodatabase(String path)
at ArcGIS.Core.Data.GeodatabaseUtil.OpenDatastore(String path)
--- End of inner exception stack trace ---
at ArcGIS.Core.Data.GeodatabaseUtil.OpenDatastore(String path)
at ArcGIS.Core.Data.Geodatabase.Open(Uri uri)
at ArcGIS.Core.Data.Geodatabase..ctor(DatabaseConnectionFile databaseConnectionFile)
at SSP.MLGW.Server.AnnotationSync.AnnotationSyncProcessor.Go() in
Code snippet:
using (var gdbTarget = new Geodatabase(new DatabaseConnectionFile(new Uri(@"C:\DeleteMe\SDE\xx@xxxxxxx.sde", UriKind.Absolute))))
{
......
}
Using a DatabaseConnectionProperties instead of a DatabaseConnectionFile yield the same error.
I have Pro 2.6 installed.
Using ArcGIS Pro or ArcCatalog I can connect via C:\DeleteMe\SDE\xx@xxxxxxx.sde without issue, so we know the Oracle client is installed and working.
Any help would be greatly appreciated.
i just tried the following code using Pro 2.6 without any problems:
//Call Host.Initialize before constructing any objects from ArcGIS.Core
Host.Initialize();
try
{
var targetGeodatabase = new Geodatabase(new DatabaseConnectionFile(new Uri(@"C:\Data\FeatureTest\sdk5.esri.com.sde", UriKind.Absolute)));
Console.WriteLine("Done");
}
catch (Exception ex)
{
Console.Error.WriteLine($@"Error: {ex}");
}
In order to debug which Dll is missing, you can try to add the following code (you can also copy this from this sample: CoreHost Resolve Assembly
Just replace the path to the .sde file.
//[STAThread] must be present on the Application entry point
[STAThread]
static void Main(string[] args)
{
//Resolve ArcGIS Pro assemblies.
AppDomain currentDomain = AppDomain.CurrentDomain;
currentDomain.AssemblyResolve += new ResolveEventHandler(ResolveProAssemblyPath);
RunLogic();
}
static void RunLogic()
{
//Call Host.Initialize before constructing any objects from ArcGIS.Core
Host.Initialize();
try
{
var targetGeodatabase = new Geodatabase(new DatabaseConnectionFile(new Uri(@"C:\Data\FeatureTest\sdk5.esri.com.sde", UriKind.Absolute)));
Console.WriteLine("Done");
}
catch (Exception ex)
{
Console.Error.WriteLine($@"Error: {ex}");
}
}
static Assembly ResolveProAssemblyPath(object sender, ResolveEventArgs args)
{
//Get path of Pro installation from registry
var arcgisProPath = GetInstallDirAndVersionFromReg().Item1;
string ProNotFound = @"ArcGIS Pro is not installed.";
if (string.IsNullOrEmpty(arcgisProPath)) throw new InvalidOperationException(ProNotFound);
string assemblyPath = Path.Combine(arcgisProPath, "bin", new AssemblyName(args.Name).Name + ".dll");
if (!File.Exists(assemblyPath)) return null;
Assembly assembly = Assembly.LoadFrom(assemblyPath);
return assembly;
}
/// <summary>
/// Get the ArcGIS Pro install location from the registry.
/// </summary>
/// <returns></returns>
private static Tuple<string, string> GetInstallDirAndVersionFromReg()
{
string regPath = @"SOFTWARE\ESRI\ArcGISPro";
string installMissing = @"Install location of ArcGIS Pro cannot be found. Please check your registry for {0}";
string versionMissing = @"Version of ArcGIS Pro cannot be determined. Please check your registry for {0}.";
string err1 = string.Format(installMissing, $@"HKLM\{regPath}\InstallDir");
string err2 = string.Format(versionMissing, $@"HKLM\{regPath}\Version");
string path = "";
string version = "";
try
{
RegistryKey localKey = RegistryKey.OpenBaseKey(Microsoft.Win32.RegistryHive.LocalMachine, RegistryView.Registry64);
RegistryKey esriKey = localKey.OpenSubKey(regPath);
if (esriKey == null)
{
localKey = RegistryKey.OpenBaseKey(Microsoft.Win32.RegistryHive.CurrentUser, RegistryView.Registry64);
esriKey = localKey.OpenSubKey(regPath);
}
if (esriKey == null)
{
//this is an error
throw new System.InvalidOperationException(err1);
}
path = esriKey.GetValue("InstallDir") as string;
if (path == null || path == string.Empty)
//this is an error
throw new InvalidOperationException(err1);
version = esriKey.GetValue("Version") as string;
if (version == null || version == string.Empty)
//this is an error
throw new InvalidOperationException(err2);
}
catch (InvalidOperationException ie)
{
//this is ours
throw ie;
}
catch (Exception ex)
{
throw new System.Exception(err1, ex);
}
return new Tuple<string, string>(path, version);
}
Wolfgang
Running the tool as administrator mitigates the problem. The underlying cause is therefore likely permissions to ~\Program Files\ArcGIS\Pro\binPro.
Thank you for your help.
Marius