6

管理者権限を必要としない Delphi 7 で書かれたアプリケーションがあります。

何らかの理由で、アプリケーションが UAC 昇格を要求していなくても、アプリケーション内から c:\windows および c:\windows\system32 にファイルを保存できます。UAC をオンにして管理者としてログインしていますが、デフォルトの UAC 設定を変更していません。ファイルは、実際には Windows エクスプローラーにも表示されます。「管理者として実行」オプションを使用していません。

同じプロファイルでワードパッドを使用して同じことをしようとすると、予想どおりエラーが発生します。

何が起こっているのですか?

このアプリケーションは、Ole 構造化ストレージを使用して保存し、次のマニフェストを含めます (役立つ場合)。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
    <assemblyIdentity type="win32" name="DelphiApplication" version="1.0.0.0" processorArchitecture="*"/>
<dependency>
<dependentAssembly>
  <assemblyIdentity
    type="win32"
    name="Microsoft.Windows.Common-Controls"
    version="6.0.0.0"
    publicKeyToken="6595b64144ccf1df"
    language="*"
    processorArchitecture="*"/>
</dependentAssembly>
</dependency>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
            <security>
                    <requestedPrivileges>
                            <requestedExecutionLevel
                                   level="asInvoker"
                                   uiAccess="false"/>
                    </requestedPrivileges>
            </security>
    </trustInfo>
</assembly>

編集:明確にするために、私のアプリケーションはデフォルトでこれらの場所に何も保存しません。標準のファイル保存ダイアログでこれらの場所を選択しています。

アップデート

上記のマニフェストが含まれているにもかかわらず、アプリケーションがレガシーとして扱われている理由がわかりました。「trustInfo」セクションを持たない 2 番目のマニフェストも含まれていたことが判明しました。この 2 番目のマニフェストを削除しました。

助けてくれてありがとう

4

3 に答える 3

17

これは、古いアプリケーションをVistaと互換性のあるものにするUACの機能です。これは、ユーザーがローカルフォルダーへのアクセス許可を持たないシステムフォルダーへの書き込み要求をリダイレクトします。

これらは、現在のユーザーのプロファイルの下の「AppData \ Local\VirtualStore」フォルダーに保存されます。この機能を無効にするグループポリシー設定があります:「ユーザーごとの場所へのファイルとレジストリの書き込みエラーを仮想化する」

このファイルとレジストリの仮想化機能は、レガシーアプリケーションをWindowsVistaの標準ユーザーアカウントで実行できるように設計されています。レガシーアプリケーションは、特定のVistaマニフェストのない32ビット実行可能ファイルとして定義されます。アプリケーションをVista互換として装飾するためにVistaマニフェストを提供する場合、この仮想化設定はアプリケーションに影響を与えません(ワードパッドの例のように)

Mark Russinovichには、これに関するすばらしい記事があります。WindowsVistaのユーザーアカウント制御の内部

于 2008-12-16T10:05:10.090 に答える
0

UACを無効にしていない限り、ファイルはユーザーディレクトリの下の仮想の場所に配置されます。

于 2008-12-16T10:05:16.253 に答える
0

UAC をオンにして管理者として実行しています。

管理者としてログオンしているということですか、それとも Delphi アプリケーションを「管理者として実行」オプション(昇格したトークン)で実行しているということですか。

後者の場合、アプリケーションは C:\Windows への書き込み権限を持ちます。

于 2008-12-16T10:04:02.730 に答える