2016-05-19 18 views
2

管理者権限で電子アプリが起動しているかどうかを確認する方法はありますか?電子アプリがWindows上で管理者権限で起動されているかどうかをチェック

私はelectron-sudo libしか管理者権限でコマンドを実行できませんでした。

しかし、複数のコマンドを実行する必要があり、毎回ユーザーに確認する必要はありません。

は、どのように私は、アプリがは電子を使用して管理者権限を持つ開始しているかどうかを確認することができますか?

最善のことは、単にソフトウェアの元の内部でコマンドを実行するには、次のようになります。私は、プロンプトが表示されます

:trueまたはfalseを返す.isAdminPrivilegesUsed(Windows上で実行されるスクリプトすることができます)、およびfalseの場合ユーザーは管理者権限でソフトウェアを再起動して終了する必要があります。

答えて

2

ノードからこれを行う方法を調べたところ、この回答が見つかりました:How to know if node-webkit app is running with Administrator/elevated privilege?

私は答えをチェックし、node-windowsをダウンロードして試しました。しかし、このソリューションではUACダイアログが表示され、常に「ユーザーに管理者権限があります」と応答しました。

isAdminUserコマンドを処理するnode-windowsコードを掘り下げて、NET SESSIONコマンドを実行しようとしていて、特権を持っていなければUACダイアログを引き起こして昇格しようとしました。

私は昇格を行う部分を引き出してこのスニペットになってしまった:

var exec = require('child_process').exec; 
exec('NET SESSION', function(err,so,se) { 
     console.log(se.length === 0 ? "admin" : "not admin"); 
    }); 

私は通常と「管理者として実行」を使用してアプリケーションを実行することによってこれをテストしました。上記のコードは、管理者として実行されていない場合は「not admin」、管理者として実行されている場合は「admin」と正しく表示されます。

これは、質問で参照した.isAdminPrivilegesUsedメソッドの内容に有効です。

+0

ありがとうございました!このコードを使用してポップアップを表示し、ユーザーに管理者権限でソフトを再起動させます。 – Aaleks

1

あなたの質問に直接答えはありません。この問題を解決するもう1つの方法は、アプリケーションを強制的に管理者として実行することです。これは、アプリケーションのマニフェストファイルを更新することによって行うことができ

、エレクトロンでこれを行う方法の一つのガイドはここにある:http://layer0.authentise.com/electron-and-uac-on-windows.html

+1

ありがとう!私はこのオプションが好きです! – Aaleks

+0

マニフェストは低い特権でもう一度更新できることに注意してください;) – Konstantin

2

あなたは今アプリは電子ビルドを使用してシステム特権で実行するように指定することができますツール:あなたは電子ビルダーを使用している場合

、あなたのpackage.jsonに以下を追加するには:で指定されているよう

"build": { 
    "win": { 
     "requestedExecutionLevel": "highestAvailable" 
    } 
    }, 

あなたは電子パッケージャを使用している場合は、「要求実行レベル」を使用しますAPI https://github.com/electron-userland/electron-packager/blob/master/docs/api.md

注:これらのオプションを使用すると、プログラムが管理者権限で実行されているかどうかを確認するのではなく、昇格された特権が要求されます。

+0

すごく感謝!非常にきれいな方法 – Aaleks

+0

基本的にこれはアップデートのマニフェストであるため、非常に価値のある "ノート"です。マニフェストは低い特権でもう一度更新することができます;) – Konstantin

+0

Windowsポータブルで動作しないようですか? – NoobTW

1

電子パッケージを使用する場合は、--win32metadata.requested-execution-level=requireAdministratorを追加してください。例:

electron-package app nameApp --asar=true --platform=win32 --arch=x86 --win32metadata.requested-execution-level=requireAdministrator --overwrite

関連する問題