20

クライアント/サーバーチェックプログラムを作成していますが、管理者として実行する必要があります。

これをネットワークとユーザーでサイレントに実行したいのですが、「管理者として実行」プロンプトは必要ありません。バッチファイルに配置して管理者として自動実行するための開始コードはありますか?

4

12 に答える 12

15

うまくいかなかったソリューション

いいえ:-ショートカットを作成します[->互換性->「このプログラムを管理者として実行します」]ソリューションは機能しません。

このオプションは、Windows7ではグレー表示されます。UACが無効になっている場合でも

いいえ:runas /env /user:domain\Administrator <program.exe/command you want to execute>ユーザーに管理者パスワードの入力を求めるため、これでも不十分です。

うまくいったソリューション

はい:UACを無効にする->タスクスケジューラを使用してジョブを作成します。これでうまくいきました。

  • タスクスケジューラでジョブを作成し、管理者権限を持つユーザーとして実行します。
  • 明示的にマーク:「最高の特権で実行」
  • UACを無効にして、このタスクを実行するためのプロンプトが表示されないようにします

必要に応じてレジストリを編集することで、後でスクリプトでUACを有効にすることができます。私の場合、このスクリプトは、イメージでUACが無効になっているWindows仮想マシンの作成によって1回だけ実行されます。

あまり面倒なことなく管理者として実行されるスクリプトの最良のアプローチをまだ楽しみにしています。

于 2014-01-08T14:57:15.670 に答える
13
@echo off

 call :isAdmin

 if %errorlevel% == 0 (
    goto :run
 ) else (
    echo Requesting administrative privileges...
    goto :UACPrompt
 )

 exit /b

 :isAdmin
    fsutil dirty query %systemdrive% >nul
 exit /b

 :run
  <YOUR BATCH SCRIPT HERE>
 exit /b

 :UACPrompt
   echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
   echo UAC.ShellExecute "cmd.exe", "/c %~s0 %~1", "", "runas", 1 >> "%temp%\getadmin.vbs"

   "%temp%\getadmin.vbs"
   del "%temp%\getadmin.vbs"
  exit /B`
于 2016-02-05T08:21:12.757 に答える
8

回避策は次のとおりです。

  1. .batファイルのショートカットを作成します
  2. ショートカットのプロパティを開きます。[ショートカット]タブで、 [詳細]をクリックします
  3. [管理者として実行]にチェックマークを付けます

ショートカットを実行すると、管理者としてバッチスクリプトが実行されます。

于 2017-06-30T12:51:12.737 に答える
6

構文を使用して可能:

RUNAS [/profile] [/env] [/netonly] /user:user Program

Key :
/profile Option to load the user's profile (registry)
/env Use current environment instead of user's.
/netonly Use the credentials specified only for remote connections.
/user Username in form USER@DOMAIN or DOMAIN\USER
(USER@DOMAIN is not compatible with /netonly)
Program The command to execute

例 :

runas /env /user:domain\Administrator <program.exe/command you want to execute>
于 2013-02-01T05:42:11.773 に答える
3

いくつかのオプションがあります。

  1. バッチファイルとネイティブコマンドのみを使用して実行する必要がある場合は、バッチファイルを自動昇格して、必要に応じてUAC管理者権限から要求するようにするにはどうすればよいですか?を確認してください。

  2. サードパーティのユーティリティがオプションの場合は、Elevateなどのツールを使用できます。実行したいプログラムをパラメータとして昇格して呼び出す実行可能ファイルです。
    このように: elevate net share ...

于 2013-02-01T13:27:42.263 に答える
1

ショートカットを作成し、常に管理者として実行するようにショートカットを設定します。

ハウツーオタクフォーラム管理者ソリューションとしてcmdを実行するバッチファイルを作成します。

エディターとnameit.batでバッチファイルを作成し、そのショートカットを作成します。Nameit.bat-ショートカット。次に、Nameit.bat-ショートカット->プロパティ->ショートカットタブ->詳細をクリックして右クリックし、管理者として実行をクリックします。ショートカットから実行してください。

于 2014-01-05T21:01:44.563 に答える
1

これまで簡単なスクリプトを見つけられなかったので、これが私の2セントです。

set ELEVATE_APP=Full command line without parameters for the app to run
set ELEVATE_PARMS=The actual parameters for the app
echo Set objShell = CreateObject("Shell.Application") >elevatedapp.vbs
echo Set objWshShell = WScript.CreateObject("WScript.Shell") >>elevatedapp.vbs
echo Set objWshProcessEnv = objWshShell.Environment("PROCESS") >>elevatedapp.vbs
echo objShell.ShellExecute "%ELEVATE_APP%", "%ELEVATE_PARMS%", "", "runas" >>elevatedapp.vbs
DEL elevatedapp.vbs
于 2014-04-24T12:10:56.813 に答える
1

Mattのスクリプトにこのわずかな変更を加えて、単一のスクリプト内から実行できるようにしました(UAC呼び出しを必要とするスクリプトの先頭にこれを追加するだけです)が、コードの下を読んで、ブログ:

:: ### START UAC SCRIPT ###

if "%2"=="firstrun" exit
cmd /c "%0" null firstrun

if "%1"=="skipuac" goto skipuacstart

:checkPrivileges
NET FILE 1>NUL 2>NUL
if '%errorlevel%' == '0' ( goto gotPrivileges ) else ( goto getPrivileges )

:getPrivileges
if '%1'=='ELEV' (shift & goto gotPrivileges)

setlocal DisableDelayedExpansion
set "batchPath=%~0"
setlocal EnableDelayedExpansion
ECHO Set UAC = CreateObject^("Shell.Application"^) > "%temp%\OEgetPrivileges.vbs"
ECHO UAC.ShellExecute "!batchPath!", "ELEV", "", "runas", 1 >> "%temp%\OEgetPrivileges.vbs"
"%temp%\OEgetPrivileges.vbs"
exit /B

:gotPrivileges

setlocal & pushd .

cd /d %~dp0
cmd /c "%0" skipuac firstrun
cd /d %~dp0

:skipuacstart

if "%2"=="firstrun" exit

:: ### END UAC SCRIPT ###

:: ### START OF YOUR OWN BATCH SCRIPT BELOW THIS LINE ###

ご覧のとおり、私の変更では2つのファイル引数を使用します。これは特にエレガントではありませんが、機能します(ダミーのプレースホルダーを使用して最初のいくつかの引数を予約することで、いつでも最後尾でそれらを隠すことができます)。さらに、AFAIK Mattのスクリプトはファイルパスのスペースをサポートしておらず、この制限はこのスクリプトの変更にも適用されます。

この問題は、VBSがこれらのパスを処理する方法に固有のようですが、以下のリンクには、ファイル引数を使用したこのような回避策を必要とせずに、単一のスクリプト内から実行されるUACを呼び出すためのさらに優れたVBSベースのソリューションがあります。ファイルパスのスペースをサポートします。

http://pcloadletter.co.uk/2012/12/11/uac-elevation-for-batch-script/

このリンクのスクリプトは、お気づきのようにわずかに異なるVBS呼び出しを行います。これにより、何らかの理由でスペースの問題が回避されます。

于 2014-12-29T18:13:02.617 に答える
1

私の解決策は、.batファイルが必要ない場合、バッチファイルを.exeファイルに変換することです。そうすれば、管理者として実行を設定できます。

于 2018-12-13T11:45:59.503 に答える
0

スタートアップアイテムとして置くことができます...スタートアップアイテムは、管理者として実行するためのプロンプトをまったく表示しません。

この記事を確認してくださいUACromptを使用しない高度なプログラムのショートカット

于 2013-05-12T20:03:29.940 に答える
0

上記のすべての答えがあなたの好みに合わない場合は、autoITを使用して、資格情報を持つ特定のユーザーとしてファイル(またはファイル)を実行できます。

そのユーザーの特権を使用してプログラムを実行するスクリプトのサンプル。

installAdmin()

Func installAdmin()
    ; Change the username and password to the appropriate values for your system.
    Local $sUserName = "xxxxx"
    Local $sPassword = "xxx"
    Local $sDirectory = "C:\ASD4VM\Download\"
    Local $sFiletoRun = "Inst_with_Privileges.bat"

    RunAsWait($sUserName, @ComputerName, $sPassword, 0, $sDirectory & $sFiletoRun)
EndFunc   ;==>Example

AutoITはここにあります。->実行可能な.exeファイルにコンパイルされた.ua3形式を使用します。

于 2014-06-18T07:31:19.210 に答える
0

時間を無駄にしないでください。次の1行のコマンドを使用して、管理者としてコマンドラインを実行します。

echo createobject("shell.application").shellexecute "cmd.exe",,,"runas",1 > runas.vbs & start /wait runas.vbs & del /f runas.vbs

管理者権限でアプリケーションを起動したい場合は、このメモ帳++のようなこのアプリケーションのホールパスを私のプログラムファイルに書き込むだけです。

echo createobject("shell.application").shellexecute "%programfiles%\Notepad++\notepad++.exe",,,"runas",1 > runas.vbs & start /wait runas.vbs
于 2018-06-03T11:47:39.730 に答える