2011-01-14 8 views
0

ローカルマシンからuserNameを取得してログファイルに置き、ログファイルにユーザー名が記録されていない場合は.exeを開始するコードを作成しています。私は私のローカルマシン上でコードを実行することができたが、私は、サーバー上に置くと、それを実行したときに、私は読み込みエラー与えています:アプリケーションで手に入らない例外

詳細「Unhandeled例外がアプリケーションで発生しました」:

このダイアログボックスの代わりに ジャストインタイム(JIT)デバッグを呼び出す方法の詳細については、このメッセージの最後を参照してください。

** * ** * **** System.ComponentModel.Win32Exception(0x80004005が) ** 例外テキスト:ファイルを見つけることができないシステムは、システムで を指定.Diagnostics.Process.StartWithShellExecuteEx(ProcessStartInfo startInfo)at System.Diagnostics.Process.Start() at System.Diagnostics.Process.Start(ProcessStartInfo startInfo) at System.Diagnostics.Process.Start(String fileName) System.Windows.Forms.Form.OnCreateControlでUser.Form1.Form1_Load(オブジェクト送信者、のEventArgs電子)System.Windows.Forms.Form.OnLoad(のEventArgs電子)で ()のSystem.Windows.Formsで で。 Control.CreateControl(ブールfIgnoreVisible)System.Windows.Forms.Control.WndProcでSystem.Windows.Forms.Control.CreateControl()System.Windows.Forms.Control.WmShowWindowで (メッセージ& M) で(メッセージ& System.Windows.Forms.ScrollableControl.WndProc System.Windows.Forms.Form.WndProcでSystem.Windows.Forms.Form.WmShowWindow(メッセージ& mにおける(メッセージ& M) ) (メッセージにおけるM)メートル)System.Windows.Forms.Control.ControlNativeWindow.OnMessage(メッセージ& M)System.Windows.Forms.Control.ControlNativeWindow.WndProcで (メッセージ& M) でSystem.Windows.Forms.NativeWindow.Callbackで(IntPtr hWnd、Int32 msg、IntPtr wparam、IntPtr lparam)

ここに私のコード///////////////////////////////////////////////////プロセスは、次のネットワークパスを見つけることができないので、

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; 
using System.IO; 
using System.Diagnostics; 

namespace User 
{ 
    public partial class Form1 : Form 
    { 
     public const string dir = @"C:\Numara"; 
     public const string path = dir + @"\Audit.log"; 
     public const string TrackIT = @"\\tkahd-nti-1\TrackIt\Audit32.exe /Q"; 

     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private void Form1_Load(object sender, EventArgs e) 
     { 
      //returns user name 
      //label1.Text = System.Environment.UserName.ToString(); 
      string userName = System.Environment.UserName; //user name 

      if (!Directory.Exists(dir)) 
       //directory does not exist 
       //create it 
       Directory.CreateDirectory(dir); //creates directory 


      //by this point directory is created 

      //now check file 
      if (!File.Exists(path)) 
       //file does not exist, so create it 
       File.Create(path); 

      //Read data from the .dat file 
      string line = System.IO.File.ReadAllText(path); 

      //if the name of the logged in user 
      //is the same as the user name of the text file 
      //then exit program 
      if (line == userName) 
       Application.Exit(); 

      else 
      //clear fields and write new name to file and begin audit 
      { 
       //clears fields 
       using (FileStream stream = new FileStream(@"C:\Numara\Audit.log", FileMode.Create)) 
       { 
        using (TextWriter writer = new StreamWriter(stream)) 
        { 
         //writer.Write(""); 
         writer.Write(userName); 
        } 
        // writes new name to file 
       } 

       //StreamReader textIn = 
       // new StreamReader(
       // new FileStream(path, FileMode.OpenOrCreate, FileAccess.Read)); 


       //begins audit 

       Process.Start(TrackIT); 
       Application.Exit(); 
      }   
     } 
    } 
} 
+1

は本当にそのすべてを参照してくださいする必要がありませんでした...シェアを信頼し、完全に試してみてください。 –

+0

@ John Saunders - さまざまなリンクされた例外をすべて含まないように質問を編集しました。スレッドをクリーンアップする必要があります。 – JonH

+0

@JonH:無関係なコードも必要ありません。 –

答えて

3

////////例外がスローされます。

\\tkahd-nti-1\TrackIt\Audit32.exe 

原因としては、アプリケーションが実行されているユーザーアカウントがそのディレクトリにアクセスできないことが考えられます。

以下のコメントから、ログオンしているユーザーの権限を使用してアプリケーションが実行されているようです。 「Audit32.exe」アプリケーションへの読み取り専用アクセスをログインするユーザーには、許可する必要があります。

ただし、これを行うには独自のアプリケーションは必要ありません。「管理ツール」(通常はコントロールパネル)から「ローカルセキュリティポリシー」を開く場合は、左側のツリービューからローカルポリシー - >ユーザー権利割り当てフォルダを開き、「ローカルログオン」を変更し、個々のユーザーまたはユーザーのグループへのログインを許可/拒否する「ローカルログオンを拒否する」設定。 ですが、自分自身を機械からロックしないように注意してください。

+0

@Andy - それは例外の原因ではないので、共有UNCパスです。これはライター/ファイルの作成と関連しています。 – JonH

+0

@JonHしかし彼が投稿した呼び出しスタックは、例外が 'Form1_Load'の中の' Process.Start'呼び出しからスローされたことを示しています。 – Justin

+0

@Andy - サーバー上でアプリを実行すると、デフォルトでどのユーザーアカウントが使用されていますか?これを解決するために私はどのような解決策を使用できますか? – Richell

関連する問題