Windows 7/Server 2008でホストファイルをプログラム的に編集するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/3193374

質問

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

詳細として、requestedexecutionlevelを「requiredministrator」に設定するために、アプリケーションにマニフェストを追加しました ここ (「簡単な方法」を使用)および関連する質問で ここ.

残念ながら、これは私にとってはうまくいきませんでした。アプリを起動するときに標高プロンプトはありません。ホストファイルのfile.AppendTextを呼び出すと、System.UnauthorizedAccesSexceptionがスローされます。拒否された。"

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>

何か案は?

役に立ちましたか?

解決

私の以前のコメントから言い換えれば、答えに変わりました:

HO1が与えた回答には、私が職場で取り組んでいるアプリとまったく同じApp.manifestが含まれており、標高が機能しています。ここでの違いは、ファイル名が「app.manifest」であり、プロジェクトオプション「マニフェスト」(アプリケーションタブ)が指していることです。

他のヒント

それが違いを生むかどうかはわかりませんが、あなたのマニフェストスニペットは、それがどうあるべきかを理解することとわずかに異なります(ただし、それは異なるバージョンかもしれませんが):

<?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>

それ以外の場合、回避策は、ユーザーが開始する別の「ローダー」アプリを用意し、それを使用して実際のWPFツールのみを起動することである可能性があります。 Verb runas で詳述されているように これ ブログ投稿(SO Process.StartInfo.Verb = "runas";).

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top