【问题标题】:procedure for calling an exe only one time只调用一次exe的过程
【发布时间】:2010-02-02 06:09:17
【问题描述】:

我正在使用 process.info,进程 start();在 c#.net 中单击按钮时调用 exe,但每次单击按钮时,它都会调用 exe 并在任务栏上打开一个重复文件。我只想最大化任务栏上已经存在的 exe。

我面临的问题是在单击按钮时一次又一次地打开同一个文件。 有什么方法可以只打开一个 exe 并在按钮上单击它可以最大化 exe 文件(如果已打开)而不是重复输入?

【问题讨论】:

    标签: .net single-instance


    【解决方案1】:

    Process.Start() 返回一个Process 对象。您可以做的是在单击按钮时初始化一个类变量(例如Process startedProcess;)。如果该变量为 null,则表示该进程尚未启动,应该启动该应用程序,否则它已经在运行,我们应该忽略它。

    这是一个基本的例子:

    Process startedProcess = null;
    
    public void button1_Clicked(object sender, EventArgs e)
    {
    
         if ( startedProcess == null )
              startedProcess = Process.Start("path\\to\\process.exe");
    
    }
    

    如果您希望在应用程序已经运行的情况下自动切换到该窗口,.NET 没有任何内置方法可以在本机上执行此操作。您将需要从 user32.dll 进行 DLLImports。可以在本页的 cmets 中找到一个示例:http://www.eggheadcafe.com/community/aspnet/14/21984/switch-to-another-runnin.aspx

    【讨论】:

      【解决方案2】:

      【讨论】:

      • 这在 IsFirstInstance() 上出现错误,无法在静态类上声明实例成员
      • 这是打字机。您必须将该方法设为静态:public static bool IsFirstInstance()
      • 还有其他方法可以解决这个问题吗?我已经通过了代码互斥锁..这是更好的选择吗?如果是,那么如何在按钮单击事件中使用它??
      • 还有一个我无法解决的错误,即 system.reflection.assembly 不包含 GetEntyAssembly() 的定义;
      • 找出你的错误在哪里。除了静态问题之外,我还能够创建一个只允许打开一个实例的应用程序。或者,也许您应该更清楚地了解您正在尝试做什么......您正在启动您制作的应用程序的 exe 是什么?还是它们是其他随机应用程序?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-04
      • 1970-01-01
      • 1970-01-01
      • 2017-06-08
      • 2016-08-18
      • 2013-01-09
      相关资源
      最近更新 更多