4.

Windows「Install/Remove of the Service Denied!」管理者権限不足の原因と対処

編集
この記事の要点
  • Tomcat / nginx / MySQL を Windows サービス化する service.bat install 等で 管理者権限が足りないと出るエラー
  • メッセージ: Install/Remove of the Service Denied!
  • 対処: PowerShell / cmd を「管理者として実行」してから同じコマンドを再実行
  • UAC が有効な環境では Windows Terminal / cmd を右クリック → 管理者として実行必須
  • sc.exe create / deletenet start / stop も同様に管理者必要
  • PowerShell の Start-Process -Verb RunAs で自動昇格も可能

このエラーの典型

C:\opt\tomcat\bin> service.bat install
Installing the service 'Tomcat9' ...
Using CATALINA_BASE:    "C:\opt\tomcat"
Using CATALINA_HOME:    "C:\opt\tomcat"
...
Install/Remove of the Service Denied!

C:\opt\tomcat\bin> service.bat remove
Removing the service 'Tomcat9' ...
Install/Remove of the Service Denied!

Windows のサービス登録/削除は SC_MANAGER_CREATE_SERVICE 権限が必要で、通常ユーザでは拒否されます。

原因

  • cmd / PowerShell を通常モードで起動している
  • UAC (User Account Control) が有効で、管理者アカウントでも昇格していない
  • そもそも管理者グループに属していないアカウント
  • グループポリシーでサービス操作が制限されている

対処 1: 管理者として実行

もっとも確実。Win キー → 「cmd」または「powershell」と入力 → Ctrl+Shift+Enter で管理者起動。または:

  1. スタートメニュー → 「Windows ターミナル」または「コマンドプロンプト」を右クリック
  2. 「管理者として実行」
  3. UAC ダイアログで「はい」
  4. タイトルバーに「管理者:」と表示されることを確認

対処 2: 管理者状態かをコマンドで確認

# PowerShell で確認
([Security.Principal.WindowsPrincipal] `
    [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole(
        [Security.Principal.WindowsBuiltInRole]::Administrator)
# True なら管理者、False なら通常モード

# cmd で確認
net session > nul 2>&1 && echo Administrator || echo Not admin

対処 3: スクリプト内から自動昇格

# install-tomcat.ps1
if (-not ([Security.Principal.WindowsPrincipal] `
    [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole(
    [Security.Principal.WindowsBuiltInRole]::Administrator)) {

    # 自分自身を管理者で再起動
    Start-Process powershell.exe `
        -ArgumentList "-NoProfile -ExecutionPolicy Bypass -File `"$PSCommandPath`"" `
        -Verb RunAs
    exit
}

# ここからは管理者として実行される
cd C:\opt\tomcat\bin
.\service.bat install
sc.exe config Tomcat9 start= auto
sc.exe start Tomcat9

サービス操作の標準コマンド

# 管理者 PowerShell で

# サービス作成
sc.exe create MyService binPath= "C:\path\to\app.exe" start= auto

# サービス削除
sc.exe delete MyService

# 開始 / 停止
sc.exe start MyService
sc.exe stop MyService
net start MyService
net stop  MyService

# 状態確認
sc.exe query MyService
Get-Service MyService

# 自動起動設定
sc.exe config MyService start= auto
Set-Service -Name MyService -StartupType Automatic

Tomcat の service.bat 詳細

# 管理者 cmd / PowerShell で
cd C:\opt\tomcat\bin

# デフォルト名 (Tomcat9, Tomcat10) でインストール
.\service.bat install

# カスタム名でインストール
.\service.bat install MyTomcat

# JVM オプション等の設定 GUI
.\tomcat9w.exe //ES//Tomcat9

# 削除
.\service.bat remove
.\service.bat remove MyTomcat

nginx を Windows サービス化

nginx 自体はサービス機能を持たないので NSSM (Non-Sucking Service Manager)winsw を使うのが定番:

# Chocolatey で NSSM
choco install nssm -y

# 管理者 PowerShell で
nssm install nginx "C:\nginx\nginx.exe"
nssm set nginx AppDirectory "C:\nginx"
nssm set nginx Start SERVICE_AUTO_START
nssm start nginx

# 削除
nssm remove nginx confirm

MySQL を Windows サービス化

# 管理者 cmd で MySQL のインストールフォルダへ
cd C:\Program Files\MySQL\MySQL Server 8.0\bin

# サービス登録
.\mysqld --install MySQL80 --defaults-file="C:\ProgramData\MySQL\MySQL Server 8.0\my.ini"

# 削除
.\mysqld --remove MySQL80

# 起動
net start MySQL80

グループポリシーで制限されている場合

  1. gpedit.msc を管理者起動
  2. コンピュータの構成 → Windows の設定 → セキュリティの設定 → ローカル ポリシー → ユーザー権利の割り当て
  3. 「サービスとしてログオン」, 「サービスとしてログオンを拒否する」を確認
  4. ドメイン環境では Active Directory 側 GPO の制約を IT 管理者に依頼

FAQ

Q: 管理者で起動しても Denied になる
A: アンチウイルス(特に法人向け Symantec / Trend Micro)がサービス改変をブロックしているケース。一時的に無効化 → 再試行。

Q: コマンドプロンプトを毎回管理者で起動するのが面倒
A: ショートカットのプロパティ → 詳細設定 → 「管理者として実行」を ON にしておく。または PowerShell プロファイルで関数化。

Q: Linux でも同じことを?
A: Linux は systemctlsudo を付ければよく、エラーメッセージは Permission denied / Failed to issue method call

編集
Post Share
子ページ

子ページはありません

同階層のページ
  1. 1071 Specified key was too long; max key length is 767 bytes
  2. ERROR 1063 (42000): Incorrect column specifier for column '~'
  3. mysqld: Can't change dir to '...\MySQL\MySQL Server X.X\data\' (OS errno 2 - No such file or directory)
  4. Install/Remove of the Service Denied!
  5. Datetime 型が NULL に見える
  6. Warning: World-writable config file '/etc/mysql/my.cnf' is ignored
  7. ERROR 1698 (28000): Access denied for user 'root'@'localhost'
  8. Exception: Wrong MySQL configuration
  9. [Warning] TIMESTAMP with implicit DEFAULT value is deprecated.
  10. ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
  11. ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
  12. Incorrect column specifier for column 'カラム名'
  13. BLOB/TEXT column 'description' used in key specification without a key length
  14. ERROR: /bin/sh: mysql_config: コマンドが見つかりません
  15. Host '...' is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts'
  16. CSVエクスポート時に「ERROR 1045 (28000): Access denied for user 'username'@'localhost'」エラーが表示される
  17. Cannot execute statement: impossible to write to binary log since BINLOG_FORMAT = STATEMENT
  18. 1
  19. 1
  20. 1)
  21. 1
  22. 1
  23. 1
  24. 1
  25. 1
  26. 1
  27. 1
  28. 1
  29. 1
  30. 1
  31. 1
  32. 1
  33. 1"'`--
  34. 1
  35. 1
  36. 1
  37. 1
  38. 1
  39. 1
  40. 1
  41. 1
  42. 1
  43. 1)
  44. 1
  45. 1
  46. 1
  47. 1
  48. 1
  49. 1
  50. 1
  51. 1
  52. 1
  53. 1"'`--
  54. 1
  55. 1
  56. SQLSTATE[22007]: Invalid datetime format: 1366 Incorrect string value: ~