0

Windowsでファイルとフォルダーの属性を変更するプログラムをc#で作成しました。私はJavaからこのプログラムを実行し、Windowsからプログラムを開始するとすべてうまくいきます.Javaでは、スローするフォルダを変更しようとするとファイルだけを変更できます:

問題の署名:
  問題イベント名: CLR20r3
  問題の署名 01: fileattr.exe
  問題の署名 02: 1.0.0.0
  問題の署名 03: 5203a06f
  問題の署名 04: mscorlib
  問題の署名 05: 4.0.30319.18052
  問題の署名 06: 5173c144
  問題の署名 07: 43cf
  問題の署名 08: 13c
  問題の署名 09: System.UnauthorizedAccess
  OS バージョン: 6.1.7601.2.1.0.256.48

それが原因で問題が発生する可能性があると考えて、プロセスビルダーディレクトリを user.home に設定しましたが、機能しません。私のコード:

試す {

                ProcessBuilder pb = new ProcessBuilder("fileattr", "+t", "\"".concat(path).concat("\""));
                pb.environment().put("fileattr", pathToApp);
                pb.directory(new File(System.getenv("WINDIR") + "\\system32"));
                プロセス p = pb.start();
                p.waitFor();
                p.destroy();
            } キャッチ (スロー可能な t) {
                t.printStackTrace();
            }
4

2 に答える 2

0

最初の可能性は解決しませんでした。UAC レベルの 2 つのオプションのマニフェスト ファイルを使用して、filleattr をビルドしました。

highestAvailable|requireAdministrator

マニフェストは次のとおりです。

<security>
  <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
    <requestedExecutionLevel level="highestAvailable" uiAccess="false" />
  </requestedPrivileges>
</security>

2番目に問題があります.Java jarに両方の.exeファイルを含めます.プログラムを開始すると.exeファイルを抽出して実行しようとします.問題は、元のファイルを実行しようとすると、抽出プロセスが実行可能ファイルの何かを変更することです.それ以外の場合は、次のようにスローされます。

This version of C:\Users\Luis\SyncData\Elevate.exe is not compatible with th e version of Windows you're running. Check your computer's system information to see whether you need a x86 (32-bit) or x64 (64-bit) version of the program, and then contact the software publisher.

@Templar の提案が機能するはずです。フォルダー属性を変更するのに十分な JVM ユーザー権限を付与するだけでよいので、試してみます。

スレッドが 30 秒から 30 秒にかけてこのメソッドを何度も呼び出すことを参照することが重要です。そのため、パーミッションは永続的である必要があります。

于 2013-08-23T14:35:31.563 に答える
0

このスレッドによると、2 つの可能性があると思います。

質問に答えていただければ幸いです。

于 2013-08-22T19:08:43.363 に答える