相关疑难解决方法(0)

在C#中使用Global Mutex有什么好的模式?

Mutex类被误解了,而Global mutex则更是如此.

在创建全局互斥锁时使用什么是好的,安全的模式?

一个会起作用的

  • 无论我的机器所在的语言环境如何
  • 保证正确释放互斥锁
  • 如果未获取互斥锁,则可选择不会永久挂起
  • 处理其他进程放弃互斥锁的情况

c# concurrency mutex

365
推荐指数
5
解决办法
10万
查看次数

如何防止多次启动我的应用程序?

我使用ClickOnce安装部署了我的C#WinForms应用程序.一切正常(经过大量工作):),但现在我遇到了一个问题:

每当我单击"开始"菜单中的应用程序快捷方式时,都会启动一个新实例.我需要避免这种情况.

我该怎么做才能防止多次发布?

c# deployment clickonce

29
推荐指数
3
解决办法
3万
查看次数

在什么情况下Process.Start()方法返回false?

来自MSDN:

返回值true表示已启动新的进程资源.如果StartInfo属性的FileName成员指定的进程资源已在计算机上运行,则不会启动其他进程资源.而是重用正在运行的进程资源并返回false.

尝试这样的事情:

var info = new ProcessStartInfo {FileName = @"CMD"};

var p1 = new Process
{
     StartInfo = info
};

var result = p1.Start(); //true
result = p1.Start(); //true

var p2 = new Process
{
    StartInfo = info
};

result = p2.Start(); //true
Run Code Online (Sandbox Code Playgroud)

如果我使用FilePath = @"c:\myapp.exe"而不是使用相同的结果CMD.

在什么情况下会返回false

.net c#

12
推荐指数
2
解决办法
1684
查看次数

如何创建单个实例WPF应用程序,在尝试打开另一个实例时还原打开的窗口?

对不起,标题很难理解.我不确定如何说出来.

我有一个应用程序,只允许每个用户会话运行一个实例.如果用户再次单击以启动应用程序,我希望将该应用程序重点关注.

该窗口可能具有折叠的可见性.

如果它可见,我知道我可以使用

if (IsIconic(hWnd))
{
    ShowWindowAsync(hWnd, swRestore);
}

SetForegroundWindow(hWnd);
Run Code Online (Sandbox Code Playgroud)

但是如果窗户折叠了,有没有办法让我把它带回可见的?

c# wpf

10
推荐指数
2
解决办法
1万
查看次数

如何在新进程中启动第二个项目的新实例

我正在寻找在单独的类库项目中定义的窗口(WPF)作为新的单独进程.有没有办法做到这一点?

我需要在新进程中启动第二个项目实例,因为当我以这种方式启动它时会占用内存:

secondProject.WPFWindow win = new secondProject.WPFWindow();
win.Show();
Run Code Online (Sandbox Code Playgroud)

我有一个包含多个项目的解决方案.

  • StartUp项目是WPF app.,输出类型:Windows应用程序(exe文件).
  • 所有其他项目都是WFP应用程序,输出类型:类库(dll文件).

现在我通过以下代码运行"应用程序"(此解决方案中构建为dll的其他项目):

secondProject.WPFWindow win = new secondProject.WPFWindow();
win.Show();
Run Code Online (Sandbox Code Playgroud)

我想要在新进程中运行应用程序...通常我会使用Process.Start(),但我不能这样,因为它需要exe文件作为agrument我有(并且想要)DLL.

c# process .net-assembly

5
推荐指数
1
解决办法
3644
查看次数

在C#中识别自己的进程名称

为了防止用户运行我的应用程序的多个实例,我使用此代码: -

 Process[] pArry = Process.GetProcesses();
           int nCount = 0;
           foreach (Process p in pArry)
           {
               string ProcessName = p.ProcessName;
               ProcessName = ProcessName.ToLower();
               if (ProcessName.CompareTo("myApp") == 0)
               {
                   nCount++;
               }
           }   
           if (nCount > 1)
           {
               MessageBox.Show(AppAlreadyRunning,"Error",MessageBoxButtons.OK,MessageBoxIcon.Error);
               Process.GetCurrentProcess().Kill();
           }
Run Code Online (Sandbox Code Playgroud)

但正如我们所知,如果更改exe名称,进程名称会更改.因此,如果用户将"myApp.exe"更改为"UserApp.exe",则此修补程序将无效!有什么出路吗?

我在VS2010中使用C#.谢谢!

c# process

4
推荐指数
1
解决办法
9151
查看次数

如何强制执行我的应用程序的单个实例?

如何确保我的应用程序的单个实例,并在尝试打开第二个实例时将焦点设置为它?

我试过了:

public partial class Form1 : Form {

    [DllImport("USER32.DLL", CharSet = CharSet.Unicode)]
    public static extern
    IntPtr FindWindow(String lpClassName, String lpWindowName);

    [DllImport("USER32.DLL")]
    public static extern
    Boolean SetForegroundWindow(IntPtr hWnd);

    private void Form1_Load(object sender, EventArgs e)
    {
        bool isRunning = Process.GetProcesses()
                                .Where(p => p.MainWindowTitle.Contains(Text))
                                .Count() > 1;

        if (isRunning)
        {
            FocusWindow(Text);
            Application.Exit();
        }
    }

    public static void FocusWindow(string title)
    {
        SetForegroundWindow(FindWindow(null, title));
    }
}
Run Code Online (Sandbox Code Playgroud)

这不是关注应用程序.我怎样才能解决这个问题?

.net c# winapi focus

4
推荐指数
1
解决办法
3097
查看次数

在.net中创建单实例应用程序的最佳方法是什么?

可能重复:
创建单实例应用程序的正确方法是什么?
在.NET中防止给定应用程序的多个实例?

我是否检查是否存在另一个具有相同名称的进程?(如果用户没有这样的权限怎么办?)

将文件写入磁盘并在退出前将其删除?(异常终止怎么办?)

这样做的最佳做法是什么?

.net c# design-patterns

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

c#通知正在运行的进程

是否有可能以某种方式从"外部"通知正在运行的进程?

我有一个理论上永远存在的C#程序.我想通知它手动触发一些动作.如果在Windows和Linux(单声道)上可以使用此解决方案,那将是最好的.

编辑:

  1. 解决方案应该没有用户界面
  2. 我的程序目前是Web服务的一部分.在初始化时,会创建一个新的Theread,它使用Task该类来保持活跃状态

c# process

0
推荐指数
1
解决办法
519
查看次数

如何将我的C#winform程序转换为服务程序?

如何将我的C#winform程序转换为服务程序?

我需要我的程序将像服务一样工作(如监听器)

c# service winforms

-1
推荐指数
2
解决办法
5622
查看次数

一次启动应用程序C#

我只是在C#中创建一个应用程序,但我不喜欢它.我想让应用程序运行一次.现在,如果我的应用程序正在运行,当我再次运行应用程序时,将启动另一个应用程序.我想让应用程序只运行一次,如果你想再次运行应用程序,而不是创建另一个应用程序,而是启动正在运行的应用程序.

谢谢.

c# forms single-instance

-1
推荐指数
1
解决办法
3118
查看次数