2013-04-23 60 views
0

我有用c#編寫的.net應用程序。此應用程序從用C++編寫的父應用程序調用。當父應用程序崩潰或意外關閉.net應用程序仍在運行。但是我想在父應用程序崩潰或停止時也關閉客戶端應用程序。使用Singleton類實現關閉客戶端應用程序

我的一位同事說我們可以很容易地實現這個使用單例類。我怎樣才能做到這一點?

回答

1

您將不得不輪詢以查看父應用程序是否仍在運行。

通過在Windows中配置審計進程跟蹤來運行應用程序時,可以設置一種方法。下面的鏈接可能讓你開始:

Audit process tracking

How can I track what programs come and go on my machine?

過程跟蹤將創建在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); 
} 

如果未列出,請關閉子應用程序。

+0

但我的問題是不是與父母aplication.How我能停止我的客戶端應用程序時parant崩潰或停止。 – TVSuser1654136 2013-04-23 05:30:50

+0

看我的編輯.... – 2013-04-23 06:05:36

+0

沒有ihave沒有訪問的c + +代碼base.But我有客戶端應用程序代碼base.Is possiblelr管理它從客戶端應用程序使用singleton類 – TVSuser1654136 2013-04-23 08:53:48