2012-04-13 7 views
0

残念ながら、検索セクションやその他のコーディングフォーラムで探していたawnserが見つかりませんでした。閉鎖。C#アプリケーションは似たようなコンピュータで動作しないようです

私は非常に単純なC#アプリケーションを開発しました。これは、Windowsのスタートアッププロジェクトの1つです。迷路の1つで、ラベル付きの単純なパネルと単純なマウスイベントを使用してポインタの位置を開始位置に戻します。

私のアプリケーションは正常に公開されており、コンピュータや他のいくつかのサーバーでスムーズに動作しますが、奇妙な理由で私の友人のラップトップにはロードされません。

私たちはどちらも同じOS(Windows 7)を共有していますが、私たちはどちらもx64バージョンを持っていて、フレームワークは同じようですが、プロセスがタスクマネージャに表示されても、インストールが成功した後。

したがって、プログラムは実行されますが、ロードされないように見え、解析する例外やエラーは発生しません。

私の質問は、私のプログラムが他のコンピュータと完全に互換性があるための要件は何ですか?

私はこの問題に取り組むのに多くの時間を費やしましたが、正しいawnserを見つけることはできませんでした。

私はまた、さらなる分析のための私のフォームのコードが表示されます。

using System; 
    using System.Collections.Generic; 
    using System.ComponentModel; 
    using System.Data; 
    using System.Drawing; 
    using System.Linq; 
    using System.Text; 
    using System.Windows.Forms; 

    namespace Labirinto 
    { 
     public partial class frmLabirinto : Form 
     { 
      // Toca um som sempre que o utilizador bater numa parede 
      System.Media.SoundPlayer startSoundPlayer = new System.Media.SoundPlayer(@"C:\Users\Ricardo Borges\Documents\Visual Studio 2010\Projects\Labirinto\Labirinto\Resources\doh.wav"); 
      // Toca um som sempre que o utilizador chegar ao final do labirinto 
      System.Media.SoundPlayer finishSoundPlayer = new System.Media.SoundPlayer(@"C:\Users\Ricardo Borges\Documents\Visual Studio 2010\Projects\Labirinto\Labirinto\Resources\tada.wav"); 


    public frmLabirinto() 
    { 
     InitializeComponent(); 
     MoveToStart(); 
    } 

    private void frmLabirinto_Load(object sender, EventArgs e) 
    { 

    } 

    /// <summary> 
    /// O método permite que o ponteiro do rato volte ao ponto inicial 
    /// </summary> 
    private void MoveToStart() 
    { 
     startSoundPlayer.Play(); //Toca o som de reinicio do jogo 
     Point startingPoint = panel1.Location; //ponto inicial 
     startingPoint.Offset(10, 10); //localizacao do ponto inicial 
     Cursor.Position = PointToScreen(startingPoint); //coloca o cursor no local inicial 
    } 

    private void finishLabel_MouseEnter(object sender, EventArgs e) 
    { 
     finishSoundPlayer.Play(); //Toca o som de fim de jogo 
     // Congratula o utilizador através de uma mensagem no ecrã 
     MessageBox.Show("Parabéns, encontrou a saída do labirinto"); 
     Close(); 
    } 

    private void wall_MouseEnter(object sender, EventArgs e) 
    { 
     MoveToStart(); //recoloca o ponteiro no ponto inicial ao embater numa parede 
    } 


} 

}

+3

startSoundPlayerとfinishSoundPlayerの値をハードコードする方法ファイルがur friendsシステム上に存在することを確認してください。 –

+1

@Parv:+1。私はコードをチェックしていない! –

+0

プログラムは、exeファイルにコンパイルされている場合は、厳密に必要ですか?そして、より適切な方法で参照をどのように追加すればよいですか? – RBorges77

答えて

0

あなたは任意のアセンブリのロードエラーを診断するFusion Log viewerを使用してみましたか?それが問題でない場合は

Using Fusion Log Viewer to Debug Obscure Loader Errors

、アプリケーションへのロギングコードを追加し、「嚥下」のエラーをされているすべてのtry/catchブロックのためのコードを確認してください。

1

SoundPlayerオブジェクトの両方を初期化するときに使用されるハードコード値がエラーを引き起こしていると感じました。例として、アプリケーションを実行しているマシン上に「Ricardo Borges」という名前のユーザーがいない場合はどうなりますか? SoundPlayerのオブジェクトの

System.Media.SoundPlayer startSoundPlayer = new System.Media.SoundPlayer(@"C:\Users\Ricardo Borges\Documents\Visual Studio 2010\Projects\Labirinto\Labirinto\Resources\doh.wav"); 
System.Media.SoundPlayer finishSoundPlayer = new System.Media.SoundPlayer(@"C:\Users\Ricardo Borges\Documents\Visual Studio 2010\Projects\Labirinto\Labirinto\Resources\tada.wav"); 

Based on the MSDN documentation「パスまたはURLが有効でない場合、SoundPlayerのはまだ構築されますが、負荷やプレイ方法への後続の呼び出しは失敗します」。

MoveToStart関数内の最初の行は次の行があります。それは、エラーの原因に応じて三つの異なる例外の1スローすることができますSoundPlayer.Play方法のために戻ってMSDNを参照する

startSoundPlayer.Play(); 

を - FileNotFoundExceptionが原因である可能性があります。

指定された場所と実際のファイルの両方が問題のマシンに存在することを確認できますか?

+0

しかし、実際に私が混乱するのは、同じビルドが他のマシンでも働いていて、同じパスもないからです。しかし、私はあなたのすべての点を理解しており、努力を感謝します。そのリファレンスを実際に置き換えて、公開/ビルドされたときにプロジェクトに必要な残りのファイルと一緒に持ち運ばれるようにするにはどうすればいいですか? – RBorges77

+0

@ vuk77アプリケーション(特に、データをロードして初期化する領域)にいくつかのロギング(System.Diagnostics)を追加する必要があります。エラーをキャプチャすることができれば、原因を絞り込むのに役立ちます。 –

関連する問題