中堅プログラマーの備忘録

忘れっぽくなってきたので備忘録として・・・

【C#.net】スクリプトからUACを無効にする

1.概要

windows用のフォームアプリを作成した時に
UACが有効だと、アプリケーションの動作上よろしくないことが多いかと思います。
ここではアプリケーションからUACを無効にしてしまおう
という考えでコードを記述していきます。

動作環境:windows10
開発環境:visual studio2015
開発言語:C#.net

2.方法

では、どのようにしてUACを無効にするかというと
手っ取り早く直接レジストリを変更します。
レジストリを直接操作するのは怖いこともありますが
そんなことは気にせず、とりあえずやっていきます。
なお、これには管理者権限でのアプリケーション実行がマストになります。

3.確認

現在のUACの状態を確認してみます。
検索ボックスにUACと入力すると検索結果に
【ユーザーアカウント制御設定の変更】
と表示されるのでこれをクリックします。
f:id:tsu--kun:20190819193553p:plain


【ユーザーアカウント制御の設定】ウィンドウが表示されます。
f:id:tsu--kun:20190819193617p:plain
これが現在のUACの設定状態になります。
UACの詳細内容については下記の記事を参照して下さい。
www.chuken-engineer.com

4.スクリプト

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace uacDisable
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {

            Microsoft.Win32.RegistryKey regKey_CPBA = Microsoft.Win32.Registry.LocalMachine.CreateSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System");
            regKey_CPBA.SetValue("ConsentPromptBehaviorAdmin", 0);
            regKey_CPBA.Close();

            Microsoft.Win32.RegistryKey regKey_POSD = Microsoft.Win32.Registry.LocalMachine.CreateSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System");
            regKey_POSD.SetValue("PromptOnSecureDesktop", 0);
            regKey_POSD.Close();
        }
    }
}

5.結果

スライダーが一番下の状態になりました。
f:id:tsu--kun:20190819193729p:plain