2011-07-28 14 views
0

すでに存在するファイルやフォルダを削除し、新しいファイルと置き換える必要があるインストーラを作成しました。C#を使用してディレクトリとファイルを削除できません

ユーザがインストールをクリックすると、インストーラはUACを要求します。 「はい」を選択すると、インストーラは既存のファイルとフォルダを削除する方法を呼び出します。しかし、ファイルとフォルダを削除することはできません。私が使用しているコードはDI.Delete(パス)です。私は管理者としてコマンドプロンプトを実行してから、「msiexecの/私のsetup.msi」コマンドを使用している場合、それはそれらのファイルやフォルダーを削除している間は、このエラーに

Access to the path 'CodeCreate.aspx' is denied. 
    at System.IO.Directory.DeleteHelper(String fullPath, String userPath, Boolean recursive) 
    at System.IO.Directory.Delete(String fullPath, String userPath, Boolean recursive) 
    at System.IO.DirectoryInfo.Delete(Boolean recursive) 
    at CustomizationCA.CustomActions.DeleteExistingFilesAndFolder(Session session) 

を与えます。

Directory.Delete(path、true)を使用する場合。私は例外としてこれを取得しています

Exception thrown by custom action: 
System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.Security.SecurityException: The source was not found, but some or all event logs could not be searched. Inaccessible logs: Security. 
    at System.Diagnostics.EventLog.FindSourceRegistration(String source, String machineName, Boolean readOnly) 
    at System.Diagnostics.EventLog.SourceExists(String source, String machineName) 
    at System.Diagnostics.EventLog.VerifyAndCreateSource(String sourceName, String currentMachineName) 
    at System.Diagnostics.EventLog.WriteEntry(String message, EventLogEntryType type, Int32 eventID, Int16 category, Byte rawData) 
    at System.Diagnostics.EventLog.WriteEntry(String source, String message, EventLogEntryType type, Int32 eventID, Int16 category, Byte rawData) 
    at System.Diagnostics.EventLog.WriteEntry(String source, String message) 
    at CustomizationCA.CustomActions.DeleteExistingFilesAndFolder(Session session) 

私はインストーラを作成するためにWIXツールを使用しています。

特定のファイルのプロパティにアクセスし、すべてのユーザーに完全なアクセス許可を与えてからファイルを削除しようとすると、ファイルが削除されています。

答えて

4

フォルダまたはファイルが読み取り専用かどうかを確認してください。ファイルを正常な状態にする。

ディレクトリ内を削除する前に、使用このコードを任意およびすべてのファイル

File.SetAttribute(path, FileAttributes.Normal); 
File.Delete(path); 
+0

私もこのコードを使用しましたが、ファイルを削除していません。私のポストに追加した詳細。 –

+1

削除操作に**偽装**または**エスカレーション**を使用してみませんか? –

+0

インストールが開始されると、インストーラはUACプロンプトを表示します。したがって、権利はすべての方法を通過しなければなりません。右? –

0

- 私ではない私はあなたを理解してください。インストーラを作成し、いくつかのファイルを削除しています。インストーラが起動すると、UACのプロンプトが表示されます。そしてファイルを削除することによって、SecurityExceptionが得られます。

インストーラを実行するユーザーがファイルを削除する権限を持っていることを確認してください。 もし彼がその許可を得ていなければ、それはうまくいかず、それは論理的です。そして、ユーザーにフルコントロールを与えても効果があると言いました。

この機能を使用するには、それらのファイルを削除する権限をユーザーに与えなければなりません。

2

ファイルを削除するために使用するカスタムアクションが延期されなければならないカスタムアクション(特殊なアクセス許可の下には、「削除」権限を見つける。)と偽装フラグが「いいえ」に設定されている必要があります。それ以外の場合、カスタムアクションは、標高が適用されていないMSIインストールを開始したユーザーの権限で実行されます。


は、より良いファイルの削除ではなく、カスタムアクションを処理するために、WiXのでRemoveFolderEx要素を使用することを検討してください。

関連する問題