-1

Windows 7では、管理者であっても多くのことができない場合があります。おそらくそれはある種のバグです。私のアプリケーションは、プログラムを開始する前に、ユーザーが管理者であるかどうかを確認します。ルートフォルダー(C :)のようにデフォルトで保護されているフォルダー内のファイル。Windows7の管理者でない場合は、そこにのみフォルダーを作成できます。

したがって、アプリケーションを右クリックして[管理者として実行]に移動すると、正常に機能します。アプリケーションを管理者として自動的に実行する方法はありますか?次のようなコード行を作成できるようにしたいと思います。ActivateAdministrator();属性を変更し、。を使用してファイルを作成するため、コードで完全に使用できるようにしますifstream

4

3 に答える 3

5

実行可能ファイルにマニフェストを追加できます-http ://msdn.microsoft.com/en-us/library/bb756929.aspx

ユーザーがUACがオンになっているシステムで実行されていて、管理者ではない場合、を含むマニフェストはrequestedExecutionLevel level="requireAdministrator"、アプリケーションを管理者権限で実行する前に、管理者パスワードのプロンプトを生成します。(管理者権限が必要な場合は、パスワードが正しくないか、パスワードがない場合、パスワードの実行が完全に停止します)

UACがオンになっている管理者の場合、同じマニフェストにより、アプリケーションに管理者権限を付与するかどうかを尋ねる[はい/いいえ]プロンプトが表示されます。

もちろん、本当の問題は、管理者権限を必要とするアプリケーションが実行していることをすべて調べる必要があるということです。

ほとんどの場合、通常のユーザーレベルのアプリケーションでは特権は必要ありません。これは実際にはアプリケーション設計の問題です-管理者権限を必要とするアプリケーションは何をしていますか?本当に必要ですか?たとえば、ファイルを変更する場合、それらのファイルがユーザーのプロファイルスペースではなく、ファイルシステムの保護された領域にあるのはなぜですか?

于 2012-04-21T00:10:54.667 に答える
2

これはC#ですが、私にはわかりませんが、もっと簡単かもしれません。私がしたことは、昇格された特権の有無にかかわらず、管理者として実行されているかどうかを検出することでしたか?、および管理アクセスを要求しているときに現在のプロセスを再実行しない場合(UACが有効になっている場合は、現在のユーザーにポップアップを表示し、プログラムを管理特権で実行してもよいかどうかを尋ねます)。

次に、いくつかの単純な(ただしC#コード)は次のようになります。

// UAC is a class from the previous link on SO
if (UAC.IsCurrentProcessElevated())
{
  string currentProcess = Assembly.GetEntryAssembly().Location;
  string arguments = string.Join(" ", this._Args.ToArray());
  ProcessStartInfo startInfo = new ProcessStartInfo(currentProcess, arguments); 
  startInfo.UseShellExecute = true;
  startInfo.Verb = "runas";
  Process.Start(startInfo);
}

昇格されていないプロセスは、管理者権限を要求する新しいプロセスが開始されたため、かなりのプロセスになります。

于 2012-04-21T00:10:09.663 に答える
2

特権に関するWindowsDevCenterの記事、特にC++での特権の有効化と無効化が役立つ場合があります。

于 2012-04-21T00:04:23.283 に答える