web-dev-qa-db-ja.com

コンソールアプリを常に管理者として実行するにはどうすればよいですか?

Erpソフトウェアによって呼び出されるように開発されたコンソールアプリケーションがあります。

彼らは私のアプリをERP内で呼び出します、そして彼らがそれをするとき、私はそれをするための不十分な許可に関連したエラーを常に受け​​取ります。

すべてのユーザーのexeのプロパティで[このプログラムを管理者として実行する]チェックボックスをオンにしましたが、結果は同じです。

アプリにuacダイアログのプロンプトを表示するマニフェストの追加について何か読んだことがありますが、アプリはサーバー上のerpから呼び出され、クライアントにはサーバー上のダイアログが表示されないため、それは私が望んでいることではありません。

このコンソールアプリを常に管理者として実行する方法を誰かに説明してもらえますか?

12
Marco

まず、このプロセスのある時点でUACダイアログが表示されることを理解してください。それを回避する方法はありません。あなたが取ることができるいくつかのアプローチがあります:

  • 人々にERPソフトウェアを昇格させて実行してもらいます。完全を期すためにこれを含めています。通常は電源を必要としないときに、アプリを実行するたびにUACプロンプトに同意する必要があるのはひどいことです。ただし、アプリが昇格されている場合に機能することを確認するには、簡単なテストとして便利です。昇格されたプロセスから起動されたものはすべて昇格されるため、アプリにエラーメッセージが表示される場合は、昇格によって修正することはできません。
  • ERPアプリのコードを変更して、アプリを昇格して起動します。あなたはC#について言及します。 runas動詞で起動することは、ここでのアプローチです。これはERP開発者に負担をかけ、彼らはそれを行うことができないかもしれません。
  • マニフェストをアプリに追加します。 1つを埋め込むことができます。または、アプリがfoo.exeと呼ばれる場合は、適切なrequestedExecutionLevelを使用してfoo.exe.manifestファイルを手動で作成します。 1つを埋め込むには、C#プロジェクトの[プロパティ]ページを使用して、適切な種類のマニフェストを選択します。 UseShellExecuteをtrueに設定して起動していることを確認してください。そうしないと、マニフェストが無視されます。

最初のオプションを選択した場合、UACプロンプトはERPアプリが起動するたびに表示されます。良くない。 2番目または3番目を選択すると、コンソールアプリがERPアプリから起動されるたびにUACプロンプトが表示されます。おそらく許容できる。

あなたが考えるかもしれないもう一つのことは、コンソールアプリが管理者特権を必要とする理由をはるかに真剣に調べることです。 CのルートまたはProgramFilesに書き込んでいますか? HKLMのレジストリキーを更新していますか?何をしているのに、なぜそのようにしているのですか?アプリが何かをインストールまたは構成しない限り(その場合、UACプロンプトを取得することは適切で適切です)、プレユーザーストレージに書き込み、昇格を必要としないようにアプリを調整する必要があります。そうすれば、どのような場合でも、高架で起動する方法について心配する必要がなくなります。

9
Kate Gregory

プロジェクトにアプリケーションマニフェストファイルを追加し([追加]-> [新しいアイテム]-> [一般]-> [アプリケーションマニフェストファイル])、以下のノードをapp.manifestに追加します。

<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />

http://msdn.Microsoft.com/en-us/library/windows/desktop/bb756929.aspx

34
Alexey

次のようなものを含むバッチファイルを作成します。

runas /env /user:%USERDOMAIN%\%USERNAME% cmd.exe /K YourProgramName.exe

ここで、%USERDOMAIN%と%USERNAME%は、管理者アカウントの詳細に置き換えられます。

代わりにそれを実行しますか?

0
AnthonyLambert