/// <summary> /// 运行需要守护的进程 /// </summary> public virtual void Run() { var config = GetConfig(); if (CheckConfig(config)) { WindowsCore.CreateProcess(config.InstallPath); } }
/// <summary> /// Try Load library /// </summary> /// <param name="libraryName">Library name (Default=NeoVM)</param> /// <param name="error">Error</param> /// <returns>Return true if is loaded</returns> public static bool TryLoadLibrary(string libraryName, out string error) { if (IsLoaded) { error = "Already loaded"; return(false); } if (string.IsNullOrEmpty(libraryName)) { libraryName = DefaultLibraryName; } // Detect OS CrossPlatformLibrary core; switch (Environment.OSVersion.Platform) { default: core = null; break; case PlatformID.Win32NT: case PlatformID.Win32S: case PlatformID.Win32Windows: case PlatformID.WinCE: { core = new WindowsCore(); break; } case PlatformID.Unix: case (PlatformID)128: case PlatformID.MacOSX: { // OSX detection workaround if (File.Exists(@"/System/Library/CoreServices/SystemVersion.plist")) { core = new MacCore(); break; } core = new LinuxCore(); break; } } // Check core if (core == null) { error = "Native library not found"; return(false); } // Load library LibraryPath = Path.Combine(AppContext.BaseDirectory, "native", core.Architecture.ToString(), libraryName + core.LibraryExtension); // Check Environment path if (!File.Exists(LibraryPath)) { var nfile = Environment.GetEnvironmentVariable("NEO_VM_PATH"); if (string.IsNullOrEmpty(nfile)) { error = "File not found: " + LibraryPath; return(false); } LibraryPath = nfile; if (!File.Exists(LibraryPath)) { error = "File not found: " + LibraryPath; return(false); } } if (!core.LoadLibrary(LibraryPath)) { error = "Wrong library file: " + LibraryPath; return(false); } // Free library AppDomain.CurrentDomain.ProcessExit += (o, e) => core?.Dispose(); // Cache delegates using reflection var delegateType = typeof(MulticastDelegate); foreach (var fi in typeof(NeoVM) .GetFields(BindingFlags.NonPublic | BindingFlags.Static) .Where(fi => fi.FieldType.BaseType == delegateType)) { var del = core.GetDelegate(fi.Name, fi.FieldType); if (del == null) { error = "Method not found: " + fi.Name; return(false); } fi.SetValue(null, del); } // Get version GetVersion(out int major, out int minor, out int build, out int revision); LibraryVersion = new Version(major, minor, build, revision); IsLoaded = true; error = null; return(true); }
public static WindowsSession Get(string windowsUserName) { Checker.Begin().NotNull(windowsUserName, nameof(windowsUserName)); return(WindowsCore.GetSessions()?.FirstOrDefault(c => c.UserName.Equals(windowsUserName, StringComparison.OrdinalIgnoreCase)) ?? null); }
public static WindowsSession Get(int sessionId) { Checker.Begin().CheckGreaterThan <int>(sessionId, nameof(sessionId), 1, true); return(WindowsCore.GetSessions()?.FirstOrDefault(c => c.SessionId == sessionId) ?? null); }