【问题标题】:Allow an executable to decide whether it's a single-instance application at run time允许可执行文件在运行时决定它是否是单实例应用程序
【发布时间】:2013-10-04 16:37:45
【问题描述】:

我有一个内置于 Visual Studio 中的可执行文件,它通常作为单实例应用程序运行(即在我们的生产环境中)。我通过使用项目属性的“应用程序”选项卡上的“Windows 应用程序框架属性”区域中的“制作单实例应用程序”复选框来完成此操作,如下所示:

我的应用程序是一个工作流应用程序,因此它涉及将工作流项从一个用户传递给另一个用户;所有相关用户都在他们自己的计算机上运行此应用程序。

然而,在我的开发环境中,我经常想同时模拟几个不同的用户(这种模拟用户的能力是用户自己不知道的功能),以便排除故障应用程序中的复杂错误。同时打开多个实例更容易,每个实例都模拟不同的用户,在某些情况下,这是必要的,因为该错误可能仅在启动应用程序的初始开销已经承担后才会发生 - 换句话说,关闭切换用户上下文的应用程序释放状态,这将排除错误。

通过取消选中上述复选框,我可以轻松完成此操作;但是,我必须记住在部署错误修复之前的某个时间点重新检查它。如果我可以在仅存在于我的开发计算机上的应用程序外部设置一些东西会更好,例如一个注册表值,它触发应用程序作为多实例应用程序运行。高低搜索了一遍,好像没有人问过这个问题。

这里有人遇到过这种情况吗?非常感谢您的帮助。

【问题讨论】:

  • 您确定如果使用 RunAs 就不能同时运行多个实例?只是好奇。因为 RunAs 在不同的配置文件下运行。我有一个应用程序设置为部署在终端服务器上的单个实例,没有问题。
  • @jcwrequests -- 嗯……这是个好主意。我会检查一下。谢谢。

标签: .net vb.net visual-studio-2010 visual-studio


【解决方案1】:

我不确定这是满足您要求的最优雅的方式,但这是我们使用的方式。我们经常需要测试一个应用的多个实例(不允许用户运行多个实例。)

VS 编译器在运行代码时,会在实例中使用 .vshost 来运行代码,因此在运行应用程序的同时使用此方法进行调试时不会出现问题。 此外,如果您想在 Windows 中运行多个实例,只需重命名 .EXE 并运行即可。

Dim myProcesses() As Process
myProcesses = process.GetProcessesByName("NameOfYourApp")
If myProcesses.Length > 1 Then
    'Close app here 
    '(You can just .Close the startup form)
End If

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-08-23
    • 1970-01-01
    • 1970-01-01
    • 2012-05-08
    • 2011-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多