2012-04-24 5 views
0

なぜテストフォルダ内のファイルは削除されませんか?どうすれば管理者アクセス権を得ることができますか?C#を使用してプログラムファイル内のファイルを削除する必要があります。ファイルは削除されません。

namespace Delete 
{ 
    using System; 
    using System.Windows.Forms; 
    using System.IO; 

    public class Delete 
    { 
     public Delete() 
     { 
      if (Directory.Exists(@"C:\Program Files (x86)\test\")) 
      { 
       string[] filePaths = Directory.GetFiles(@"C:\Program Files (x86)\test\"); 
       foreach (string file in filePaths) { File.Delete(file); } 
      } 
     } 
    } 
} 
+2

は、昇格したコマンドプロンプトから実行します。 – vcsjones

+0

これは、exeファイルから実行されるプログラムに注入され、あなたの言うことを調べる必要があります。exeは管理者として実行する必要がありますか? – jitsuin

答えて

0

「Program Files」フォルダからファイルを削除するには、アプリケーションを管理者として実行します。さもなければ、あなたは%PROGRAMFILES%へのアクセスを得ることができません。ここで

は、現在のアプリケーションを再起動し、管理者として実行するためのサンプルコードです:

ProcessStartInfo proc = new ProcessStartInfo(); 
proc.UseShellExecute = true; 
proc.FileName = Application.ExecutablePath; 
proc.Verb = "runas"; 



try 
      { 

       Process.Start(proc); 

      } 

      catch 

      { 

       // The user refused the elevation. 

       // Do nothing and return directly ... 

       return; 

      } 

      Application.Exit(); // Quit itself 
+0

ああクール、私はWindowsのセキュリティ機能として、ユーザーの選択をバイパスする方法はないと思いますか? – jitsuin

3

あなたはあなたの戦略を再考する必要があります。

、あなたのアプリケーション内からプログラム的にファイルを削除/追加している場合、彼らは(つまりなど、書き込み/削除のために昇格させる管理PRIVSを必要としません)別の場所に格納する必要があります。

  1. ユーザーのデータディレクトリ/会社/アプリケーション、または
  2. ユーザーのドキュメント/会社/アプリケーション

のようにProgram Filesディレクトリが一緒にインストールされたアプリケーション固有のファイル(DLLの、など)のためでありますプログラムですが、ちゃんはしません一度インストール/更新されました。ここで

は、アプリケーションがユーザーのデータディレクトリの例です:

public static DirectoryInfo ApplicationVersionDirectory() 
{ 
    return new DirectoryInfo(System.Windows.Forms.Application.UserAppDataPath); 
} 
+0

おかげでチャック、良いアイデア:) – jitsuin

関連する問題