8

開発目的でhostsファイルのエントリを管理するための小さなWPFユーティリティを作成しています。ご存知かもしれませんが、hostsファイルは新しいOS(Win 7/2008 / Vista)によって保護されています。

ここで(「簡単な方法」を使用して)詳細に説明し、関連する質問で、requestedExecutionLevelを「requireAdministrator」に設定するマニフェストをアプリケーションに追加しまし

残念ながら、これは私にはうまくいきませんでした。アプリを起動しても昇格プロンプトが表示されず、hostsファイルに対してFile.AppendTextを呼び出すと、System.UnauthorizedAccessExceptionがスローされます。「パス'C:\ Windows \ System32 \ drivers \ etc\hosts'へのアクセスは拒否された。"

HostsChanger.exe.manifest:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity version="1.0.0.0" processorArchitecture="X86" name="HostsChanger" type="win32"/>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
    <security>
        <requestedPrivileges>
            <requestedExecutionLevel level="requireAdministrator"/>
        </requestedPrivileges>
    </security>
</trustInfo>
</assembly>

何か案は?

4

3 に答える 3

3

私の以前のコメントから言い換えると、答えになりました:

ho1 の回答には、私が仕事で取り組んでいるアプリとまったく同じ app.manifest が含まれており、昇格が機能しています。ここでの違いは、ファイル名が "app.manifest" であり、プロジェクト オプション "Manifest" ([アプリケーション] タブ) がそれを指していることです。

于 2010-07-08T17:18:45.187 に答える
2

違いが生じるかどうかはわかりませんが、マニフェストのスニペットは、それがどうあるべきかについての私の理解とは少し異なります(ただし、それは異なるバージョンである可能性があります):

<?xml version="1.0" encoding="utf-8"?>
<asmv1:assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   <assemblyIdentity version="1.0.0.0" name="HostsChanger" />
   <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
      <security>
         <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
            <requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
         </requestedPrivileges>
      </security>
   </trustInfo>
</asmv1:assembly>

それ以外の場合、回避策として、ユーザーが開始する別の「ローダー」アプリを用意し、このブログ投稿 (so )Verb runasで説明されているように、を使用して実際の WPF ツールのみを開始することが考えられます。Process.StartInfo.Verb = "runas";

于 2010-07-07T09:37:24.513 に答える
1

私はここで暗闇の中で突き刺すつもりであり、それは Authenticode 署名の問題であると言います. 申請書への署名について言及したことは聞いたことがありません。私の理解では、Vista とは異なり、Windows 2008/7 で昇格されたアプリケーションを実行する唯一の方法は、アプリケーションが必要とする特権レベルを識別する署名済みのアプリケーション マニフェストを持つことです。署名についてサポートが必要な場合は、アプリケーションの署名方法に関する記事をご覧ください: http://msdn.microsoft.com/en-us/library/bb756995.aspx

于 2010-07-08T14:28:21.137 に答える