小编Ale*_*icu的帖子

C# dot net core 单实例应用程序将参数传递给第一个实例

最近,我决定将我的一个用 C# 编写并针对.NET Framework 4.5 的 WPF Windows 桌面应用程序迁移到最新的.NET Core 3.1。一切都很好,直到我必须添加对单实例应用程序的支持,同时能够将任何参数从第二个实例传递到第一个运行实例。我之前针对单实例应用程序的 WPF 实现是使用System.Runtime.Remoting,这在 .NET Core 中不可用。因此我必须做一些新的事情。下面是我想出的实现。它工作得很好,但我觉得它可以改进。请随意讨论和改进建议的解决方案。

我创建了一个 SingleInstanceService,它使用信号量来指示它是否是第一个实例。如果它是第一个实例,我将创建一个 TcpListener 并无限期地等待从第二个实例传递的任何参数。如果启动了第二个实例,则我将第二个实例的参数发送到第一个侦听实例,然后退出第二个实例。

internal class SingleInstanceService
{
    internal Action<string[]> OnArgumentsReceived;

    internal bool IsFirstInstance()
    {
        if (Semaphore.TryOpenExisting(semaphoreName, out semaphore))
        {
            Task.Run(() => { SendArguments(); Environment.Exit(0); });
            return false;
        }
        else
        {
            semaphore = new Semaphore(0, 1, semaphoreName);
            Task.Run(() => ListenForArguments());
            return true;
        }
    }

    private void ListenForArguments()
    {
        TcpListener tcpListener = new TcpListener(IPAddress.Parse(localHost), localPort);
        try
        {
            tcpListener.Start();
            while …
Run Code Online (Sandbox Code Playgroud)

c# parameter-passing single-instance .net-core

6
推荐指数
1
解决办法
2087
查看次数

应用程序尝试随机连接到Internet.为什么?

我正在使用VS2010中的.NET Framework 4.0开发一个C#应用程序.它是许可的.我已经从DreamSpark下载了VS2010,因为我是一名学生.但是,在调试我的应用程序时,myapp.vshost.exe尝试连接到各种远程IP地址.他们之中有一些是:

194.7.155.82, 199.7.59.190
Run Code Online (Sandbox Code Playgroud)

此外,当我在发布模式下编译我的应用程序并使用它时,我的防火墙弹出我的应用程序尝试连接到不同的IP地址.我的应用程序不需要任何互联网连接.但是,它试图连接.

请告诉我如何阻止这种行为?

这些是我项目的参考:

Interop.IWshRuntimeLibrary 
Interop.NetFwTypeLib 
System.dll 
System.Management.dll 
System.ServiceModel.dll 
System.ServiceProcess.dll 
Run Code Online (Sandbox Code Playgroud)

他们都来自微软并签名.我不使用任何第三方库.我还将此添加到我的app.config文件中:

<?xml version="1.0"?>
<configuration>
  <runtime>
    <generatePublisherEvidence enabled="false"/>
  </runtime>  
</configuration>
Run Code Online (Sandbox Code Playgroud)

.net c#

3
推荐指数
1
解决办法
225
查看次数

标签 统计

c# ×2

.net ×1

.net-core ×1

parameter-passing ×1

single-instance ×1