You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
227 lines
9.4 KiB
227 lines
9.4 KiB
using System; |
|
using System.Collections.Generic; |
|
using System.Configuration; |
|
using System.Diagnostics; |
|
using System.Linq; |
|
using System.Runtime.InteropServices; |
|
using System.ServiceProcess; |
|
using System.Threading; |
|
using System.Windows.Forms; |
|
using Fleck; |
|
using KGIS.Framework.Core.Services; |
|
using KGIS.Framework.Platform; |
|
using KGIS.Framework.Platform.Interface; |
|
using KGIS.Framework.Utils; |
|
using KGIS.Framework.Utils.Helper; |
|
using Kingo.PluginServiceInterface; |
|
using Microsoft.Win32; |
|
using UIShell.OSGi; |
|
|
|
namespace Kingo.BuildDB |
|
{ |
|
static class Program |
|
{ |
|
internal delegate bool EnumWindowsProc(IntPtr hWnd, IntPtr lParam); |
|
|
|
[DllImport("user32.dll", EntryPoint = "FindWindow")] |
|
private extern static IntPtr FindWindow(string lpClassName, string lpWindowName); |
|
|
|
[DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true)] |
|
private static extern int ShowWindow(IntPtr hwnd, int nCmdShow); |
|
|
|
[DllImport("User32.dll", CharSet = CharSet.Auto)] |
|
internal static extern bool EnumWindows(EnumWindowsProc lpEnumFunc, IntPtr lParam); |
|
|
|
[DllImport("User32.dll", CharSet = CharSet.Auto)] |
|
internal static extern int GetWindowThreadProcessId(IntPtr hWnd, out IntPtr lpdwProcessId); |
|
|
|
[DllImport("User32.dll", CharSet = CharSet.Auto)] |
|
internal static extern IntPtr GetWindow(IntPtr hWnd, uint uCmd); |
|
|
|
[DllImport("USER32.DLL")] |
|
public static extern bool SetForegroundWindow(IntPtr hWnd); |
|
|
|
public static bool v = false; |
|
/// <summary> |
|
/// 应用程序的主入口点。 |
|
/// </summary> |
|
[STAThread] |
|
static void Main(string[] agrs) |
|
{ |
|
string SystemName = "数 据"; |
|
agrs = new string[] { "NDBG" }; |
|
Platform.Instance.SystemType = SystemTypeEnum.NDBGJK; |
|
SystemName = "年 度 变 更"; |
|
Application.EnableVisualStyles(); |
|
Application.SetCompatibleTextRenderingDefault(false); |
|
|
|
Process curr = Process.GetCurrentProcess(); |
|
List<Process> process = Process.GetProcessesByName(curr.ProcessName).ToList(); |
|
if (process != null && process.Count > 0) |
|
{ |
|
foreach (Process item in process) |
|
{ |
|
if (item.Id == curr.Id) continue; |
|
ShowWindow(item.MainWindowHandle, 1); |
|
SetForegroundWindow(item.MainWindowHandle); |
|
Application.Exit(); |
|
return; |
|
} |
|
} |
|
|
|
try |
|
{ |
|
GdalConfiguration.ConfigureGdal(); |
|
GdalConfiguration.ConfigureOgr(); |
|
} |
|
catch (Exception ex) |
|
{ |
|
LogAPI.Debug("Gdal注册失败!"); |
|
LogAPI.Debug(ex); |
|
} |
|
|
|
try |
|
{ |
|
ServiceController sc = new ServiceController("ArcGIS License Manager"); |
|
if (!KGIS.Framework.AE.AELicense.AoInit(true) || sc.Status == ServiceControllerStatus.Stopped) |
|
{ |
|
MessageHelper.Show("ArcGIS授权服务未启动或已到期,请检查ArcGIS授权!"); |
|
return; |
|
} |
|
} |
|
catch (Exception ex) |
|
{ |
|
MessageHelper.Show("ArcGIS授权服务未启动或已到期,请检查ArcGIS授权!"); |
|
LogAPI.Debug(ex.Message); |
|
return; |
|
} |
|
using (var bundleRuntime = new BundleRuntime()) |
|
{ |
|
#region |
|
int loadedBundleCount = 0; |
|
Action<bool> action = null; |
|
IAsyncResult asyncResult = null; |
|
IPluginStart startPlugin = null; |
|
List<IBundle> bundles = new List<IBundle>(); |
|
//插件状态发生改变事件,用来加载启动插件的进度 |
|
EventHandler<BundleStateChangedEventArgs> bundleStateChangeEventHandler = (sender, e) => |
|
{ |
|
if (e.CurrentState != BundleState.Starting || e.Bundle.Name == "SystemBundle") |
|
return; |
|
if (startPlugin == null) |
|
startPlugin = bundleRuntime.GetFirstOrDefaultService<IPluginStart>(); |
|
string[] Name_ID = e.Bundle.Name.Split(new char[] { '_' }, StringSplitOptions.RemoveEmptyEntries); |
|
if (startPlugin != null) |
|
{ |
|
startPlugin.SetTitle(string.Format(ConfigurationManager.AppSettings.Get("APPName"), SystemName)); |
|
startPlugin.SetSystemType(SystemTypeEnum.NDBGJK.ToString()); |
|
if (!startPlugin.IsShow) |
|
{ |
|
action = (ar) => |
|
{ |
|
if (ar) |
|
{ |
|
startPlugin.ShowDialog(); |
|
} |
|
}; |
|
asyncResult = action.BeginInvoke(true, null, null); |
|
//等待启动界面打开 |
|
while (!startPlugin.IsShow) |
|
{ |
|
Thread.Sleep(50); |
|
} |
|
loadedBundleCount++; |
|
startPlugin.SetPercent(loadedBundleCount, bundleRuntime.Framework.Bundles.Count - 1, Name_ID[0]); |
|
} |
|
else |
|
{ |
|
loadedBundleCount++; |
|
startPlugin.SetPercent(loadedBundleCount, bundleRuntime.Framework.Bundles.Count - 1, Name_ID[0]); |
|
} |
|
} |
|
}; |
|
#if DEBUG |
|
v = true; //Kingo.PluginServiceInterface.Helper.AuthorizationVerification.ValidityLic(bundleRuntime, false, 6); |
|
#else |
|
v = Kingo.PluginServiceInterface.Helper.AuthorizationVerification.ValidityLic(bundleRuntime, false, 6); |
|
#endif |
|
if (!v) |
|
return; |
|
//注册插件状态事件 |
|
bundleRuntime.Framework.EventManager.AddBundleEventListener(bundleStateChangeEventHandler, true); |
|
//开始启动插件 |
|
bundleRuntime.Start(); |
|
//取消插件状态的事件 |
|
bundleRuntime.Framework.EventManager.RemoveBundleEventListener(bundleStateChangeEventHandler, true); |
|
|
|
if (!v) |
|
{ |
|
GC.Collect(); |
|
Application.Exit(); |
|
return; |
|
} |
|
LogAPI.Debug("系统初始化..."); |
|
//建库版本类型_GIS版本_授权类型_版本号_版本发布时间 |
|
LogAPI.Debug($"{string.Format(ConfigurationManager.AppSettings.Get("VersionInformation"), GetArcGISVersion())}"); |
|
#endregion |
|
var platform = bundleRuntime.GetFirstOrDefaultService<IPlatformService>(); |
|
if (platform != null) |
|
{ |
|
Platform.Instance.Open(); |
|
platform.InitUI(null); |
|
startPlugin?.CloseForm(); |
|
ExtensionShowWindow.MainWinForm = platform.Instance; |
|
Platform.Instance.OutputMsg("系统初始化完成。"); |
|
Platform.Instance.UpdateStateBar("系统初始化完成"); |
|
WebsocketHelper.Instance.ConnectionCallback = (s) => |
|
{ |
|
WebsocketHelper.Instance.Conn = s as IWebSocketConnection; |
|
{ |
|
(s as IWebSocketConnection).OnOpen = () => { }; |
|
} |
|
}; |
|
WebsocketHelper.Instance.Start(7080); |
|
Application.Run(platform.Instance); |
|
RunIDService.Dispose(); |
|
} |
|
else |
|
{ |
|
LogAPI.Debug("IPlatformService接口获取失败!"); |
|
} |
|
} |
|
} |
|
|
|
/// <summary> |
|
/// 获取ArcGSI版本 |
|
/// </summary> |
|
/// <returns></returns> |
|
static string GetArcGISVersion() |
|
{ |
|
string registryKey64 = @"SOFTWARE\WOW6432Node\ESRI\ArcGIS 10.2 License Manager"; // 适用于64位系统 |
|
string registryKey32 = @"SOFTWARE\ESRI\ArcGIS 10.2 License Manager";// 适用于32位系统 |
|
string registryPath = Environment.Is64BitOperatingSystem ? registryKey64 : registryKey32; |
|
try |
|
{ |
|
using (RegistryKey key = Registry.LocalMachine.OpenSubKey(registryPath)) |
|
{ |
|
if (key != null) |
|
{ |
|
object realVersion = key.GetValue("RealVersion");//10.2.2 |
|
//realVersion = key.GetValue("Installer"); //"Administrator" |
|
//realVersion = key.GetValue("ProductName");//ArcGIS 10.2.2 License Manager |
|
if (realVersion.ToString() == "10.2.2") |
|
{ |
|
return $"ArcGIS{realVersion}"; |
|
} |
|
} |
|
} |
|
} |
|
catch (Exception ex) |
|
{ |
|
LogAPI.Debug($"获取ArcGIS版本错误:{ex.Message}"); |
|
} |
|
return "AGVF"; |
|
} |
|
|
|
} |
|
}
|
|
|