0

Windows PCの一部のソフトウェアを特定の時間内に実行する必要があり、ユーザーがそれを起動するはずだったと想像してみてください。しかし、彼はそれを実行するのを忘れていました。そして、そのソフトウェアは管理者として(つまり管理者権限で)実行されることになっていた。したがって、特定のソフトウェアがその時点で開いていることを保証するために、ユーザーが実行する必要があることを実行できるウォッチドッグを配置します。

これは私の状況ではありませんが、それが私に必要なことです。これはC++で動作する必要があり、Qtを使用しています(ただし、それほど大きな違いはないと思います)。

私はMSDNでCreateProcess()や同様の関数についてほぼすべてのファイルを検索し、ネットで数十の例を見ましたが、今まではやりたいことができませんでした(実際、ソフトウェア、詳細ははるかに少ない)。

ウォッチドッグは、管理者としてソフトウェアを開き、すぐに「忘れる」ことになっていることに注意することが重要です。制御がなく、開いているソフトウェアがウォッチドッグに依存していてはなりません(たとえば、ウォッチドッグが閉じている場合、開いているソフトウェアは引き続き正常に実行されます)。

誰かが助けてくれたら嬉しいです。

モメルギル

4

1 に答える 1

1

通常、プログラムの実行に管理者権限が必要な場合は、管理者権限を持つユーザーがプログラムインストールする必要があります。

これにより、プログラムに対する管理者権限が付与されます。

更新:管理者権限で別のアプリケーションを実行するために別のプロセスを取得しようとすることについてのコメントに基づいて、次のコードを調べる必要があります。

using System.Security.Principal;

public static void ProcessStart(string fileName, string arguments) {
  ProcessStartInfo startInfo = new ProcessStartInfo(fileName, arguments);
#if !PocketPC
  try {
    WindowsIdentity id = WindowsIdentity.GetCurrent();
    WindowsPrincipal pal = new WindowsPrincipal(id);
    if (pal.IsInRole(WindowsBuiltInRole.Administrator)) {
      Process.Start(startInfo);
    }
  } catch (Exception e) {
    Console.WriteLine(e.Message);
  }
#else
  Process.Start(startInfo);
#endif
}

このコードはMicrosoftPocketPCデバイスを除外し、プログラムを実行している人が管理者グループに属している場合にのみ実行されます。

あなたがする必要があるのは、管理者権限を持つアカウント(アプリケーションを実行したいPC上で)のWindowsIdentityを開始し、そのアカウントを偽装してアプリケーションを実行することです。

.NETのUserImpersonationというタイトルのCodeProjectでこれを行う方法の実例があり、より多くの情報を得ることができます。

于 2012-07-04T21:24:27.247 に答える