2009-06-22 24 views
0

C#VS 2005.C#アプリケーションが実行されない

私はインストール時に開発マシンで完全に動作するアプリケーションを開発しました。ただし、どのクライアントマシンでも実行されません。

Windowsの新規インストールでVMWareでテストしましたが、アプリケーションはまだ動作しません。

アプリケーションが失敗している場所を特定して判断するためにログを追加しました。私の以前のバージョンはうまくいきました。開発の1週間後に私はクライアントに与えて、この問題を経験しました。

コンストラクタとform_loadイベントの開始時と終了時にログに記録しました。コンストラクタは正常に実行されます。しかし、コンストラクタの最後には、出力するログ文があるので、form_loadイベントでは実行されません。

アプリケーションが実行されると、タスクマネージャに数秒間表示されてからロードされません。

これは解決するのが非常に難しい問題だと思います。だから、誰かがこれを経験したことがあるか、この問題を解決するために正しい方向に私を指すことができます。

フォームのロードイベントのコード。

private void CATDialer_Load(object sender, EventArgs e) 
{ 
    my_logger.Info("Start of form load event"); // Doesn't display this. 
    . 
    . 
} 

=====編集静的メイン====

[STAThread] 
    static void Main() 
    { 
     Application.SetCompatibleTextRenderingDefault(false); 

     // Get the language and set this cultureUI in the statusdisplay that will 
     // change the language for the whole program. 
     string language = CATWinSIP.Properties.Settings.Default.Language; 
     if (language == "th-TH") 
     { 
      StatusDisplay.StatusDisplay status_display = new StatusDisplay.StatusDisplay(true); 
     } 
     else if(language == "en-GB") 
     { 
      StatusDisplay.StatusDisplay status_display = new StatusDisplay.StatusDisplay(false); 
     } 
     try 
     { 
      Application.Run(new CATDialer()); 
     } 
     catch (Exception ex) 
     { 
      Console.WriteLine(ex.Message); 
     } 

=== ===コンストラクタ

public CATDialer() 
{ 
    //Set the language for all the controls on the form. 
    //Has to be done before all components are initialized. 
    //If not Thai language then must be using English. 
    if (Settings.Default.Language == "th-TH") 
    { 
     Thread.CurrentThread.CurrentUICulture = new CultureInfo("th-TH"); 
    } 
    else 
    { 
     Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-GB"); 
    } 

    InitializeComponent(); 

    this.statusDisplay1.BalanceStatus = CATWinSIP_MsgStrings.BalanceStatus; 
    this.statusDisplay1.RedialHistory = CATWinSIP_MsgStrings.RedialHistory; 
    this.statusDisplay1.LoginStatus = CATWinSIP_MsgStrings.LoginSuccessful; 

    // Enable logging 
    XmlConfigurator.Configure(); 
    logger.Info("CATDialer Constructor(): XmlConfigurator.Configure() Loaded [ OK ]"); 
    // MessageBox.Show("Balance Status: " + this.statusDisplay1.BalanceStatus); 

    //Short cut menu. 
    this.SetupShortCutMenu(); 

    this.fill_properties(); 

    logger.Debug("CATDialer Constructor(): Fill properties loaded [ OK ]"); 
} 

-

こんにちは、

すべてのアドバイスをいただき、ありがとうございます。

暗号ストリームを使用して作成した私のクラスライブラリの1つに問題があります。

私は

私のProgram.csにこれを追加したとき答えはメッセージボックスが失敗したアセンブリのための情報を表示しました。

おかげで、

try 
{ 
    Application.Run(new CATDialer()); 
} 
catch (Exception ex) 
{ 
    MessageBox.Show(ex.ToString()); 
} 
+0

アプリケーションオブジェクトである「静的メイン」と「ctor」を投稿できますか? –

+1

例外がスローされますか?彼らは何を言いますか? –

答えて

3

を使用すると、別の開発マシン上でチェックしましたか?あなたのシステムは.netフレームワークの同じバージョンを実行していますか? NET Frameworkがリモートシステムに正しくインストールされていますか?別の環境でアプリケーションをテストしましたか?

編集:あなたのログをスパムしましたか? try catchで全体を包み込み、キャプチャできるものを確認します。時には、この種のログ(MessageBox.Show())に便利なメッセージボックスを使用していることがあります。

2

ほとんどのヘルプを得るためにスローされる例外の種類についてもう少し詳しく述べる必要があります。

正しいフレームワークバージョンを持っているかどうかのようなすべての明白なチェックが合格しなかった場合、次に失敗するのはアセンブリが不足していることがあります。

この場合、アプリでアセンブリの読み込みをトラブルシューティングすることができます。

MS Assembly Binding Log Viewer (fuslogvw)は、この作業のための貴重なキットです。

1

この種のシナリオでは、.NETアセンブリバインディングログビューア(Fusion)が何が起こっているかを見つけるのに非常に役立つことがよくあります。フュージョンを使用すると、どのアセンブリがロードされているのか、どのアセンブリがロードされているのかを知ることができます。さらに重要なことは、ロードが失敗したアセンブリと.NETがそれらをロードしようとしたアセンブリを融合で表示できるようにすることです。

これが役に立つと思われる場合は、MSDNの記事を参照してください。

関連する問題