/// <summary> /// 用于测试一个程序是否是唯一实例,通过字符串进行限制。 /// </summary> /// <param name="appId"></param> public static bool IsSingleton(string appId) { MemoryShare ms = new MemoryShare(); ms.Init(appId); byte[] bts = new byte[ms.MaxLength]; ms.Read(ref bts, 0, bts.Length); bool b = true; for (int i = 0; i < bts.Length; i++) { if (bts[i] > 0) { b = false; break; } } if (b) { for (int i = 0; i < bts.Length; i++) { bts[i] = 1; } ms.Write(bts, 0, bts.Length); } return(b); }
public void Initialize() { var settings = EngineSettings.Default; settings.ActiveMode = Settings.ActiveMode; settings.UseSparseFiles = true; settings.AutoSelectPort = true; settings.ReconnectTimeout = 45; if (Settings.TCPPort != 0) { settings.TcpPort = Settings.TCPPort; } if (Settings.UDPPort != 0) { settings.UdpPort = Settings.UDPPort; } _engine = new DcEngine(settings); _engine.TagInfo.Version = "livedc"; _hubManager = new DcHubManager(this, _client); if (File.Exists(SharePath)) { try { _engine.Share = MemoryShare.CreateFromXml(SharePath); _engine.Share.Reload(); } catch (Exception x) { logger.Error("Unable to load share from {0} because {1}", SharePath, x.Message); } } if (_engine.Share == null) { _engine.Share = new MemoryShare(); } if (Settings.StorageAutoSelect) { _engine.Settings.PathDownload = StorageHelper.GetBestSaveDirectory(); } else { _engine.Settings.PathDownload = Settings.StoragePath; } if (File.Exists(IncompletePath)) { try { _engine.DownloadManager.Load(IncompletePath); } catch (Exception x) { logger.Error("Unable to load downloads {0}", x.Message); } } Settings.Nickname = "livedc" + Guid.NewGuid().ToString().GetMd5Hash().Substring(0, 8); _engine.ActiveStatusChanged += delegate { OnStatusChanged(); }; _engine.StartAsync(); _engine.Connect(); if (!string.IsNullOrEmpty(Settings.PortCheckUrl)) { LiveApi.PortCheckUri = Settings.PortCheckUrl; } ThreadPool.QueueUserWorkItem(o => AutoConfiguration()); }