8

スタックやその他のフォーラムには、UAC の無効化/バイパス/抑制に関する質問/回答が多数投稿されています。解決策もあります。しかし、プログラム的にはおそらくそうではありません。プログラムでUACを無効にするソリューションは1つしかありませんが、実際のプログラムによるソリューションはおそらくありません。

ユーザーがwampのようなプログラムを実行するたびにプロンプ​​トが表示され、常に[はい]をクリックする必要があるユーザーを保存するためのプログラム的なソリューションはありますか? 私はあると確信しています

ここで、windows が GUI を介してタスク スケジューラでこの機能を提供することを発見したため、コードを介しても可能である必要があります。

更新: 機能している純粋なプログラム ソリューションを用意しました。私の答えを見てください。

4

3 に答える 3

12

簡単な説明:新しいコンソール/ウィンドウアプリケーションを作成して、UACをバイパスするアプリケーションを実行し、以下のガイドに従って、このアプリケーションでターゲットアプリケーションのパスを選択し、このプログラムを1回コンパイルして、いつでも実行します

ステップバイステップ

  1. このCodeplexリンクからMicrosoft.Win32.TaskScheduler.dllをダウンロードします
  2. ac#アプリケーション(Windowsまたはコンソール)を作成し、上記のdllへの参照を追加します
  3. プロジェクト(このアプリケーション)に新しいアイテム(アプリケーションマニフェストファイル)を追加します
  4. <requestedExecutionLevel level="asInvoker" uiAccess="false" /> に変更<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
  5. program.csファイルに次のコードを記述します

using System;
using Microsoft.Win32.TaskScheduler;
class Program
{
   static void Main(string[] args)
   {
      TaskService ts = new TaskService();          
      TaskDefinition td = ts.NewTask();
      td.Principal.RunLevel = TaskRunLevel.Highest;
      //td.Triggers.AddNew(TaskTriggerType.Logon);          
      td.Triggers.AddNew(TaskTriggerType.Once);    // 
      string program_path = @"c:\wamp\wampmanager.exe"; // you can have it dynamic
//even of user choice giving an interface in win-form or wpf application

      td.Actions.Add(new ExecAction(program_path, null));
      ts.RootFolder.RegisterTaskDefinition("anyNamefortask", td);          
   }
}

6.アプリケーション(このアプリ)をコンパイルして実行します


これで、アプリケーション(WAMPなど)は、希望するスケジュールでUACダイアログを表示せずに実行されます(私の場合は、Windowsにログオンするたびに)

ソース

開始元:単一のアプリのUACをオフにできますか?Windows7上の特定のプログラムのUACを選択的に無効にする

基本的な考え方:タスクスケジューラを使用して、起動時にVistaにUAC制限付きプログラムを起動させる

スケジュールされたタスクの作成からの基本的な実装

于 2013-03-03T23:53:52.053 に答える
2

適切な方法は、ユーザーアクセス制御(UAC)を無視することではなく、これらのパラメーター内でテストすることです。そうすれば、セキュリティを混乱させることなく、代わりにその範囲内で作業できます。

セキュリティを無効にすると、エクスプロイトのリスクが発生します。いくつかのセキュリティテストを提供するSecunaによると、中小企業、怠惰な開発者アプリケーション、そして明らかにセキュリティを無視しているアプリケーションが注目されているアプリケーションであることに気づきました。

つまり、アプリケーションはある時点で被害者になる可能性があります。

私が採用するアプローチは、UAC内でのテストです。タスクを実行するための適切な権限が存在することを確認してください。そうすれば、昇格された権限で常に実行されないようになります。例は次のとおりです。

class Elevated_Rights
{
    // Token Bool:
    private bool _level = false;

    #region Constructor:
    protected Elevated_Rights()
    {
           // Invoke Method On Creation:
           Elevate();
     }
     #endregion
     public void Elevate()
     {
           // Get Identity:
           WindowsIdentity user = WindowsIdentity.GetCurrent();

           // Set Principal
           WindowsPrincipal role = new WindowsPrincipal(user);

           #region Test Operating System for UAC:
           if (Environment.OSVersion.Platform != PlatformID.Win32NT ||            Environment.OSVersion.Version.Major < 6)
            {
                 // False:
                 _level = false;
             }
             #endregion
             else
             {
                    #region Test Identity Not Null:
                    if (user == null)
                    {
                        // False:
                        _level = false;
                    }
                    #endregion
                    else
                    {
                        #region Ensure Security Role:
                        if (!(role.IsInRole(WindowsBuiltInRole.Administrator)))
                        {
                            // False:
                            _level = false;
                        }
                        else
                        {
                            // True:
                            _level = true;
                        }
                        #endregion
             } 
      }
} 

これらの線に沿った何かにより、UACに対してテストしてから、タスクを実行できます。なぜUACを無効にしたいのかよくわかりませんが、それが私のアプローチです。

うまくいけば、それがお役に立てば幸いです。

于 2013-03-03T23:17:08.073 に答える