我有用c#編寫的.net應用程序。此應用程序從用C++編寫的父應用程序調用。當父應用程序崩潰或意外關閉.net應用程序仍在運行。但是我想在父應用程序崩潰或停止時也關閉客戶端應用程序。使用Singleton類實現關閉客戶端應用程序
我的一位同事說我們可以很容易地實現這個使用單例類。我怎樣才能做到這一點?
我有用c#編寫的.net應用程序。此應用程序從用C++編寫的父應用程序調用。當父應用程序崩潰或意外關閉.net應用程序仍在運行。但是我想在父應用程序崩潰或停止時也關閉客戶端應用程序。使用Singleton類實現關閉客戶端應用程序
我的一位同事說我們可以很容易地實現這個使用單例類。我怎樣才能做到這一點?
您將不得不輪詢以查看父應用程序是否仍在運行。
通過在Windows中配置審計進程跟蹤來運行應用程序時,可以設置一種方法。下面的鏈接可能讓你開始:
過程跟蹤將創建在Windows事件日誌條目,然後您可以訪問使用C++,C#& /或VB 。淨。您可以使用這些日誌來查看父應用程序是否正在運行。
編輯:
如果你有機會到C++代碼庫,你可以嘗試捕捉異常的父應用程序崩潰或關閉時,如:
Application.ThreadException += new ThreadExceptionEventHandler(ApplicationThreadException);
AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(ApplicationUnhandledException);
private void ApplicationThreadException(object sender, ThreadExceptionEventArgs e)
{
//Write to a File, Registry, Database flagging the application has crashed
}
private void ApplicationUnhandledException(object sender, UnhandledExceptionEventArgs e)
{
//Write to a File, Registry, Database flagging the application has crashed
}
private void frmMain_FormClosed(object sender, FormClosedEventArgs e)
{
//Write to a File, Registry, Database flagging the application has closed
}
否則,你將不得不輪詢看如果父應用程序在過程管理器中列出,例如:
StringBuilder sb = new StringBuilder();
ManagementClass MgmtClass = new ManagementClass("Win32_Process");
foreach (ManagementObject mo in MgmtClass.GetInstances())
{
sb.Append("Name:\t" + mo["Name"] + Environment.NewLine);
sb.Append("ID:\t" + mo["ProcessId"] + Environment.NewLine);
sb.Append(Environment.NewLine);
}
如果未列出,請關閉子應用程序。
首先,您必須在父窗口引發異常或關閉時捕獲事件。其次,你將發送關閉消息來處理父窗口已經啓動的消息。 爲了您的信息有關發送關閉消息,您可以在這裏需要參考: Send message to a Windows process (not its main window)
或者
但我的問題是不是與父母aplication.How我能停止我的客戶端應用程序時parant崩潰或停止。 – TVSuser1654136 2013-04-23 05:30:50
看我的編輯.... – 2013-04-23 06:05:36
沒有ihave沒有訪問的c + +代碼base.But我有客戶端應用程序代碼base.Is possiblelr管理它從客戶端應用程序使用singleton類 – TVSuser1654136 2013-04-23 08:53:48