2016-05-04 27 views
0

私はある目的のためにコマンドラインユーティリティを持っています。 ShellExecuteEx関数を使用してCOM DLLからこのユーティリティを起動します。 ShellExecuteExを呼び出すとき、lpVerbパラメータを "runas"と指定してユーティリティを起動します。私は起動時にexeクライアントからCOMインターフェイス関数を呼び出します。だから私はクライアントexeを起動すると、ユーティリティも開始されます。私の問題は、ユーティリティが起動して以来、常にUACの確認プロンプトが表示されることです。私はこのプロセスの間に手動介入がないので、これに耐えられません。ですから、私はUACプロンプトを表示せずに起動するユーティリティが必要ですが、クライアントexeを起動するときにはまだ上昇しています。これを達成する方法はありますか?私は、いくつかのシステム設定の変更ではなく、マニフェストファイルの変更など、ユーティリティ自体の中で行われた変更を好むでしょう。どんな助けも高く評価されます..特定のアプリケーションのUACプロンプトを無効にする方法

答えて

0

これは、UACの目的を破るため、これは記述方法(マニフェスト変更)では不可能です。

ただし、スケジュールされたタスクを使用することはできます。このようにして、ユーザー対話による高度は、タスクが作成されるときに1回だけ必要です。あなたが同じことを行うが、ログオン・トリガーなしでできるhttps://stackoverflow.com/a/36838171/1871033

は、私がここに与えてくれた答えを見てみましょう。だからあなたは自分で動かないスケジュールされたタスクを持つだろうが、それは存在する。昇格なしでschtasks.exe /run /tn YourTaskNameを使用して、昇格された権限でタスクを実行できます。

+0

しかし、ShellExecuteExを使用してCOM DLLからアプリケーションを起動します。引数をとるコマンドラインユーティリティです。私はこれらの引数をShellExecuteExに渡します。スケジュールされたタスクを追加すると同じメカニズムが可能ですか?私はShellExecuteExを呼び出す代わりに、私は自分のCOM DLLからタスクをトリガできるはずです。コマンドライン引数を指定しても。その後、アプリケーションが終了するのを待って(完了するタスク)、次に続行します。プログラム的に可能ですか?もしそうなら、これに関するいくつかの情報を提供してください。 – Partha

+0

ああ、そうです...実行時にコマンドライン引数を渡す必要がある場合、これはそのままでは機能しません。たとえば、名前付きパイプを介して入力を受け付ける、または定義された場所のテキストファイルから読み込むラッパーとして特別なツールを書く必要があります。 (どちらの場合も、権限昇格の脆弱性が導入されていないことを確認するために入力を慎重に慎重にする必要があります)、またはサービスを書くことを検討してください。しかしどちらの方法でも簡単なことではありません。 – CherryDT

+0

私は特に、UAC通知を無効にする必要があります。なぜなら、私のユーティリティアプリケーションは、サーバー上で起動するはずなので、ユーザーの操作はありません。しかし、私は管理者権限が必要です。管理者権限を持つダンプ(非インタラクティブ)サーバーでアプリケーションを起動しなければならないウィンドウに、このようなシナリオがないのだろうか?このようなシナリオでは、そこで使用されるメカニズムは何でしょうか?上記のシナリオは多くの人々にとって必要条件になる可能性があるので、実際には解決策があることを願っています。 – Partha

関連する問題