Я успешно создал мьютекс .net следующим образом: SingleIns = new Mutex(true, AppName); некоторое время. Он работает в XP, Vista, но, видимо, не в Windows7. Поэтому мне нужно сделать вызов взаимодействия с библиотекой Win32, чтобы другие компоненты Com могли идентифицировать мьютекс. Я нашел следующий код, но файл Win32Calls. не найден... нужна ли мне сборка или ссылка? Заранее спасибо,
Найден код из: http://www.pinvoke.net/default.aspx/kernel32/CreateMutex.html
с помощью System.Runtime.InteropServices;
[DllImport("kernel32.dll")]
public static extern IntPtr CreateMutex(IntPtr lpMutexAttributes, bool bInitialOwner, string lpName);
// create IntPtrs for use with CreateMutex()
IntPtr ipMutexAttr = new IntPtr( 0 );
IntPtr ipHMutex = new IntPtr( 0 );
try
{
// Create the mutex and verify its status BEFORE construction
// of the main form.
ipHMutex = Win32Calls.CreateMutex( ipMutexAttr,
true, "CompanyName_AppName_MUTEX" );
if (ipHMutex != (IntPtr)0)
{
// check GetLastError value (MUST use this call. See MSDN)
int iGLE = Marshal.GetLastWin32Error();
// if we get the ERROR_ALREADY_EXISTS value, there is
// already another instance of this application running.
if (iGLE == Win32Calls.ERROR_ALREADY_EXISTS)
// So, don't allow this instance to run.
return;
}
else
{ // CreateMutex() failed.
// once the app is up and running, I log the failure from
// within the frmMain constructor.
bool m_bMutexFailed = true;
}
// construct the main form object and
//form = new frmMain();
// run the app.
//Application.Run( form );
}
catch( Exception oEx )
{
//...handle it...
}
finally
{
// release the mutex
if (ipHMutex != (IntPtr)0)
Win32Calls.ReleaseMutex( ipHMutex );
// cleanup the main form object instance.
if (form != null) {
form.Dispose();
}
}
}
Mutex
в основном должен работать в Windows 7 так же, как и в предыдущих версиях. - person Dirk Vollmar   schedule 15.12.2009