|
|
|
|
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.Core.Authorize;
|
|
|
|
|
using Kingo.PluginServiceInterface;
|
|
|
|
|
using System;
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
using System.Configuration;
|
|
|
|
|
using System.Diagnostics;
|
|
|
|
|
using System.Linq;
|
|
|
|
|
using System.Management;
|
|
|
|
|
using System.Reflection;
|
|
|
|
|
using System.Runtime.InteropServices;
|
|
|
|
|
using System.ServiceProcess;
|
|
|
|
|
using System.Threading;
|
|
|
|
|
using System.Windows.Forms;
|
|
|
|
|
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 = "数 据";
|
|
|
|
|
if (agrs.Length ==0)
|
|
|
|
|
agrs = new string[] { "NDBG" };
|
|
|
|
|
if (agrs.Length > 0)
|
|
|
|
|
{
|
|
|
|
|
switch (agrs[0])
|
|
|
|
|
{
|
|
|
|
|
case "DTBJK":
|
|
|
|
|
Platform.Instance.SystemType = SystemTypeEnum.DTBJK;
|
|
|
|
|
SystemName = "单 图 斑";
|
|
|
|
|
break;
|
|
|
|
|
case "RCBG":
|
|
|
|
|
Platform.Instance.SystemType = SystemTypeEnum.RCBGJK;
|
|
|
|
|
SystemName = "日 常 变 更";
|
|
|
|
|
break;
|
|
|
|
|
case "NDBG":
|
|
|
|
|
Platform.Instance.SystemType = SystemTypeEnum.NDBGJK;
|
|
|
|
|
SystemName = "年 度 变 更";
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
Application.EnableVisualStyles();
|
|
|
|
|
Application.SetCompatibleTextRenderingDefault(false);
|
|
|
|
|
//Application.Run(platform.Instance);
|
|
|
|
|
string cfgFilePath = System.IO.Path.Combine(SysAppPath.GetConfigPath(), "LayersCfg.xml");
|
|
|
|
|
dynamic Cfg = SerializeAPI.DeserializeToObject2<dynamic>(cfgFilePath);
|
|
|
|
|
Mutex instance = new Mutex(true, $"{Platform.Instance.SystemType}_30", out bool createdNew);
|
|
|
|
|
//if (createdNew)
|
|
|
|
|
//{
|
|
|
|
|
//}
|
|
|
|
|
//else
|
|
|
|
|
//{
|
|
|
|
|
//MessageHelper.ShowTips("已经打开该应用程序,请先关闭!");
|
|
|
|
|
Process curr = Process.GetCurrentProcess();
|
|
|
|
|
|
|
|
|
|
List<Process> process = Process.GetProcessesByName(curr.ProcessName).ToList();//.
|
|
|
|
|
//Where(p => p.Id != curr.Id && p.GetCommandLine().Contains($"{Platform.Instance.SystemType}_30")).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));
|
|
|
|
|
//if (args != null && args.Length > 0)
|
|
|
|
|
//{
|
|
|
|
|
//startPlugin.SetTitle(args[0]);
|
|
|
|
|
startPlugin.SetSystemType(SystemTypeEnum.NDBGJK.ToString());
|
|
|
|
|
//if (Name_ID.Length == 2)
|
|
|
|
|
//{
|
|
|
|
|
// if (!Name_ID[1].Contains(SystemTypeEnum.NDBGJK.ToString()))
|
|
|
|
|
// {
|
|
|
|
|
// bundles.Add(e.Bundle);
|
|
|
|
|
// //e.Bundle.Stop(BundleStopOptions.Transient);
|
|
|
|
|
// }
|
|
|
|
|
//}
|
|
|
|
|
//else
|
|
|
|
|
//{
|
|
|
|
|
// bundles.Add(e.Bundle);
|
|
|
|
|
//}
|
|
|
|
|
//}
|
|
|
|
|
|
|
|
|
|
if (!startPlugin.IsShow)
|
|
|
|
|
{
|
|
|
|
|
action = (ar) =>
|
|
|
|
|
{
|
|
|
|
|
if (ar)
|
|
|
|
|
{
|
|
|
|
|
startPlugin.ShowDialog();
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
//isWelcomeShow = true;
|
|
|
|
|
};
|
|
|
|
|
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]);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
LogAPI.Debug("000000");
|
|
|
|
|
}
|
|
|
|
|
//e.Bundle.BundleID
|
|
|
|
|
};
|
|
|
|
|
#if DEBUG
|
|
|
|
|
Validity(bundleRuntime);
|
|
|
|
|
#else
|
|
|
|
|
Validity(bundleRuntime);
|
|
|
|
|
#endif
|
|
|
|
|
if (!v)
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
//if (RunIDService2.Instance.Codes.Contains("210781"))
|
|
|
|
|
//{
|
|
|
|
|
// string ring = SysConfigsOprator.GetAppsetingValueByKey("210781");
|
|
|
|
|
// //MessageHelper.Show(RunIDService2.Instance.Secretkey);
|
|
|
|
|
// string ring2 = Decrypt(ring, RunIDService2.Instance.Secretkey);
|
|
|
|
|
// RunIDService2.Instance.Area = ring2;
|
|
|
|
|
//}
|
|
|
|
|
//if (string.IsNullOrWhiteSpace(RunIDService2.Instance.Area))
|
|
|
|
|
//{
|
|
|
|
|
|
|
|
|
|
// string ring = SysConfigsOprator.GetAppsetingValueByKey("Ring");
|
|
|
|
|
// ring = Decrypt(ring, RunIDService2.Instance.Secretkey);
|
|
|
|
|
// ring = ring.Replace("POLYGON((", "").Replace("))", "");
|
|
|
|
|
// ring = ring.Replace(',', ';');
|
|
|
|
|
// ring = ring.Replace(' ', ',');
|
|
|
|
|
// RunIDService2.Instance.Area = ring;
|
|
|
|
|
//}
|
|
|
|
|
//注册插件状态事件
|
|
|
|
|
bundleRuntime.Framework.EventManager.AddBundleEventListener(bundleStateChangeEventHandler, true);
|
|
|
|
|
//开始启动插件
|
|
|
|
|
bundleRuntime.Start();
|
|
|
|
|
//取消插件状态的事件
|
|
|
|
|
bundleRuntime.Framework.EventManager.RemoveBundleEventListener(bundleStateChangeEventHandler, true);
|
|
|
|
|
#endregion
|
|
|
|
|
//foreach (IBundle item in bundles)
|
|
|
|
|
//{
|
|
|
|
|
// LogAPI.Debug("Del:" + item.Name);
|
|
|
|
|
// item.Stop(BundleStopOptions.Transient);
|
|
|
|
|
//}
|
|
|
|
|
var platform = bundleRuntime.GetFirstOrDefaultService<IPlatformService>();
|
|
|
|
|
if (platform != null)
|
|
|
|
|
{
|
|
|
|
|
//platform.InitService();
|
|
|
|
|
Platform.Instance.Open();
|
|
|
|
|
platform.InitUI(null);
|
|
|
|
|
if (startPlugin != null)
|
|
|
|
|
startPlugin.CloseForm();
|
|
|
|
|
ExtensionShowWindow.MainWinForm = platform.Instance;
|
|
|
|
|
Platform.Instance.OutputMsg("系统初始化完成。");
|
|
|
|
|
Platform.Instance.UpdateStateBar("系统初始化完成");
|
|
|
|
|
|
|
|
|
|
//if (Platform.Instance.MapsService != null)
|
|
|
|
|
//{
|
|
|
|
|
//}
|
|
|
|
|
//else
|
|
|
|
|
//{
|
|
|
|
|
// LogAPI.Debug("软件启动失败,可能的原因:");
|
|
|
|
|
// LogAPI.Debug("ArcGIS授权服务未启动或已到期,请检查ArcGIS授权!");
|
|
|
|
|
//}
|
|
|
|
|
//GdalConfiguration.ConfigureGdal();
|
|
|
|
|
//GdalConfiguration.ConfigureOgr();
|
|
|
|
|
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接口获取失败!");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
public static string Decrypt(string content, string strKey)
|
|
|
|
|
{
|
|
|
|
|
string result = string.Empty;
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
if (string.IsNullOrWhiteSpace(content))
|
|
|
|
|
return string.Empty;
|
|
|
|
|
System.Security.Cryptography.RijndaelManaged rm = new System.Security.Cryptography.RijndaelManaged
|
|
|
|
|
{
|
|
|
|
|
Key = System.Text.Encoding.UTF8.GetBytes(strKey),
|
|
|
|
|
Mode = System.Security.Cryptography.CipherMode.ECB,
|
|
|
|
|
Padding = System.Security.Cryptography.PaddingMode.PKCS7
|
|
|
|
|
};
|
|
|
|
|
//将base64字符串转换成byte数组
|
|
|
|
|
byte[] contentArray = Convert.FromBase64String(content);
|
|
|
|
|
//创建解密转换器
|
|
|
|
|
System.Security.Cryptography.ICryptoTransform cDecryptTransform = rm.CreateDecryptor();
|
|
|
|
|
//对byte数组进行解密转换
|
|
|
|
|
Byte[] DecryptArray = cDecryptTransform.TransformFinalBlock(contentArray, 0, contentArray.Length);
|
|
|
|
|
//将解密后的byte[]转换成字符串(base64)
|
|
|
|
|
string strDecrypt = System.Text.Encoding.UTF8.GetString(DecryptArray);
|
|
|
|
|
//将base64字符串转换成8位无符号整数数组
|
|
|
|
|
byte[] base64ToByte = Convert.FromBase64String(strDecrypt);
|
|
|
|
|
//string s = Encoding.UTF8.GetString(base64ToByte);
|
|
|
|
|
//将8位无符号整数数组转换成等效字符串,并返回
|
|
|
|
|
return System.Text.Encoding.UTF8.GetString(base64ToByte);
|
|
|
|
|
}
|
|
|
|
|
catch (Exception ex)
|
|
|
|
|
{
|
|
|
|
|
throw new Exception("解密工程文件异常:" + ex.Message);
|
|
|
|
|
}
|
|
|
|
|
finally
|
|
|
|
|
{
|
|
|
|
|
GC.Collect();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
private static void Validity(object obj)
|
|
|
|
|
{
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
//判断授权方式
|
|
|
|
|
var type = ConfigurationManager.AppSettings.Get("LicenseType");
|
|
|
|
|
if (type == "F")//本地授权
|
|
|
|
|
{
|
|
|
|
|
Attribute guid_attr = Attribute.GetCustomAttribute(Assembly.GetExecutingAssembly(), typeof(GuidAttribute));
|
|
|
|
|
string guid = ((GuidAttribute)guid_attr).Value;
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
string[] licpath = System.IO.Directory.GetFiles(System.Environment.CurrentDirectory, "*.lic", System.IO.SearchOption.TopDirectoryOnly);
|
|
|
|
|
if (licpath.Length == 0)
|
|
|
|
|
{
|
|
|
|
|
MessageHelper.ShowError("授权校验失败!");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (licpath.Length == 0 || !RunIDService2.Instance.Verify(AuthorizeType.多合一授权, "KGIS_SJJK", "400", "4x", "", "10eaa61"))
|
|
|
|
|
{
|
|
|
|
|
KGIS.PlatformPlugin.Views.License.LicenseView lic = new KGIS.PlatformPlugin.Views.License.LicenseView(obj, "KGIS_SJJK", "400", "4x");
|
|
|
|
|
lic.Code = "10eaa61";
|
|
|
|
|
int num = -1;
|
|
|
|
|
//lic.DocValidity = Validity;
|
|
|
|
|
DialogResult dialog = lic.ShowDialog();
|
|
|
|
|
if (dialog != DialogResult.Yes && dialog != DialogResult.OK)
|
|
|
|
|
{
|
|
|
|
|
v = false;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
v = true;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
catch (Exception ex)
|
|
|
|
|
{
|
|
|
|
|
MessageHelper.Show(ex.Message);
|
|
|
|
|
LogAPI.Debug(ex);
|
|
|
|
|
KGIS.PlatformPlugin.Views.License.LicenseView lic = new KGIS.PlatformPlugin.Views.License.LicenseView(obj, "KGIS_SJJK", "400", "4x");
|
|
|
|
|
lic.Code = "10eaa61";
|
|
|
|
|
int num = -1;
|
|
|
|
|
//lic.DocValidity = Validity;
|
|
|
|
|
DialogResult dialog = lic.ShowDialog();
|
|
|
|
|
if (dialog != DialogResult.Yes || dialog != DialogResult.OK)
|
|
|
|
|
{
|
|
|
|
|
v = false;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else if (type == "D")
|
|
|
|
|
{
|
|
|
|
|
if (!RunIDService2.Instance.Verify("BGDCPRO", "300", "3x"))
|
|
|
|
|
{
|
|
|
|
|
KGIS.PlatformPlugin.Views.License.LicenseView lic = new KGIS.PlatformPlugin.Views.License.LicenseView(obj, "KGIS_SJJK", "400", "4x");
|
|
|
|
|
|
|
|
|
|
DialogResult dialog = lic.ShowDialog();
|
|
|
|
|
if (dialog != DialogResult.Yes && dialog != DialogResult.OK)
|
|
|
|
|
{
|
|
|
|
|
v = false;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
KGIS.PlatformPlugin.Views.License.LicenseView lic = new KGIS.PlatformPlugin.Views.License.LicenseView(obj, "KGIS_SJJK", "400", "4x");
|
|
|
|
|
int num = -1;
|
|
|
|
|
lic.DocValidity = Validity;
|
|
|
|
|
DialogResult dialog = lic.ShowDialog();
|
|
|
|
|
if (dialog != DialogResult.Yes || dialog != DialogResult.OK)
|
|
|
|
|
{
|
|
|
|
|
v = false;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
v = true;
|
|
|
|
|
}
|
|
|
|
|
catch (Exception ex)
|
|
|
|
|
{
|
|
|
|
|
LogAPI.Debug(ex);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
private static string GetCommandLine(this Process process)
|
|
|
|
|
{
|
|
|
|
|
using (ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT CommandLine FROM Win32_Process WHERE ProcessId = " + process.Id))
|
|
|
|
|
using (ManagementObjectCollection objects = searcher.Get())
|
|
|
|
|
{
|
|
|
|
|
return objects.Cast<ManagementBaseObject>().SingleOrDefault()?["CommandLine"]?.ToString();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|