2012-03-10 12 views
0

開発マシンで正常に読み込まれるC#アプリケーションがありますが、Win2008マシンでも起動できません。C#アプリケーションが別のマシンで実行されていません

チェックフレームワークと、彼らは一致し、ネット4.0

私はすぐに問題はいくつかのテストコードを使用して、私から読み取り、十分に確認された特定のファイルへの参照から生じた疑いがある私は、単一の行にそれを絞り込みます。

public static string[] salesArray = (File.ReadAllLines("sales.txt").ToArray()); 

私は上記の行をコメントアウトした場合、テスト用アプリが起動し、私はそれを残せば、それは失敗します。何か案は?

Debugディレクトリをその中の2番目のマシン(sales.txt)にコピーします。

これはコード全体です。アプリは何もしませんが、空白のウィンドウを開きます。

namespace testServer 
{ 
    public partial class Form1 : Form 
    { 

     public static string[] salesArray = (File.ReadAllLines("sales.txt").ToArray()); 

     public Form1() 
     { 
      InitializeComponent(); 
     } 
    } 
} 
+1

現在のディレクトリを設定するために何もしなかった場合(または現在のディレクトリがあなたが思っているものであることを十分に確認する)、相対パスを使用すると、私は非常に悪い考えとして私を打ちます。 –

+0

ファイルを@ "c:\ sales.txt"に設定しようとしましたが、そのファイルがそこにあることを確認しました。あるマシンでは動作し、別のマシンでは動作しません。 –

+0

私は両方のマシンでNET 4.0を持っていましたが、開発マシンにもレガシーNETバージョンがあったとしても、問題が見つかりました。私は、NET 4.0は後方互換性がないと思うので、すぐに私は2番目のマシンにNET 3.5をインストールしたので、アプリはうまく動作します。 –

答えて

2

あなたは、そのファイルを見つけるために、より優れたメカニズムを使用して、その存在を確認する必要があります(例:File.Exists)それを開く前に。

これは、問題があると予想される場所にファイルが存在しないなど、問題が発生した場合にユーザーに報告することもできます。

1

コードの周りに例外ハンドラを配置します。エラーメッセージが表示され、正常に処理できます。

すべてのエラー(ファイルが見つからない、使用中のファイル、許可エラーなど)を処理する必要があります。

3

2つの潜在的な問題が飛び出す:

1)アプリの現在の作業ディレクトリは、あなたがそれだと思うものではありません:あなたはこれを示す/印刷することができ 場合、あなたは確かに知っているだろう。 http://msdn.microsoft.com/en-us/library/system.io.directory.getcurrentdirectory.aspx

相対パスを指定しているため、現在の作業ディレクトリは、ファイルが解決されているディレクトリです。

2)おそらく許可。あなたは、その理論のクイックチェックとして「管理者として実行」を右クリックすることができます。

+0

私は変更しようとしました:public static string [] salesArray =(File.ReadAllLines(@ "c:\ sales.txt")。ToArray());また、管理者として実行しようとすると、問題は解決しません。私は文字列パス= Directory.GetCurrentDirectory()を追加しました。 MessageBox.Show(path);最初に実行され、現在のディレクトリでメッセージボックスが表示されますが、OKを押すとすぐにReadLineコードにヒットするとクラッシュします。 –

+0

スティーブが言ったように、try/catchとMessageBox.Show(e)でその行を囲む必要があります。 – sethcall

+0

私はtry catchを使用しました。ここでは何が起こっているのですか:「 'testserver.Form1.cs'の型初期化子は例外を投げました。 –