【发布时间】:2014-03-18 16:21:36
【问题描述】:
我正在尝试通过 Windows 应用认证工具包提取 WinForms 应用程序,但在此测试中失败:
<TEST INDEX="17" NAME="Multi user session test" DESCRIPTION="Multi User checks Application invocation in multiple sessions." EXECUTIONTIME="00h:00m:24s.22ms">
<RESULT><![CDATA[FAIL]]></RESULT>
<MESSAGES />
我猜这是因为我只允许应用程序的一个实例运行,如下所示:
using ( var p = System.Diagnostics.Process.GetCurrentProcess() )
if ( System.Diagnostics.Process.GetProcessesByName( p.ProcessName ).Length > 1 )
{
MessageBox.Show(
"An instance of xxx is already running!",
Title,
MessageBoxButtons.OK,
MessageBoxIcon.Exclamation );
return;
}
这是一个通过热键组合激活的托盘应用程序,注册了这个功能:
[DllImport( "user32", EntryPoint = "RegisterHotKey", CharSet = CharSet.Ansi, SetLastError = true, ExactSpelling = true )]
public static extern int RegisterHotkey( IntPtr hWnd, int id, int fsModifiers, int vk );
所以我想我有两个问题:
1) 如何正确防止多个会话在同一个用户会话中运行,但允许多个实例跨多个用户会话?
2) 我可以在不同的用户会话中注册相同的热键吗?还是必须在切换用户会话时以某种方式取消注册并重新注册热键?
TIA
【问题讨论】:
-
我认为使用互斥锁是防止多个实例的更好方法
标签: c# windows desktop-application app-certification-kit wack