15

私のアプリは ClickOnce テクノロジを使用しています。今日、私はそれを管理者として実行する必要がありました。からマニフェストファイルを変更しました

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

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

ただし、VS はプロジェクトをコンパイルできません。

エラー 35 ClickOnce は要求実行レベル 'requireAdministrator' をサポートしていません。

一気に使うのは無理だと思います。ではない?システム時刻を変更する必要があります。アプリケーション レベルで変更できますか? エミュレートできますか?私がしたいことをすることができます。時間を +2 時間ずらしてから、1 秒戻します。いくつかの dll を取得しましたが、それらは時間を要求します。

4

6 に答える 6

29

実際には、ClickOnce アプリケーションを管理者権限で実行することはできませんが、少しハックがあります。管理者権限で新しいプロセスを開始できます。App_Startup:

if (!IsRunAsAdministrator())
{
  var processInfo = new ProcessStartInfo(Assembly.GetExecutingAssembly().CodeBase);

  // The following properties run the new process as administrator
  processInfo.UseShellExecute = true;
  processInfo.Verb = "runas";

  // Start the new process
  try
  {
    Process.Start(processInfo);
  }
  catch (Exception)
  {
    // The user did not allow the application to run as administrator
    MessageBox.Show("Sorry, this application must be run as Administrator.");
  }

  // Shut down the current process
  Application.Current.Shutdown();
}

private bool IsRunAsAdministrator()
{
  var wi = WindowsIdentity.GetCurrent();
  var wp = new WindowsPrincipal(wi);

  return wp.IsInRole(WindowsBuiltInRole.Administrator);
}

記事全文を読む。

ただし、よりネイティブで簡単なソリューションが必要な場合は、ユーザーに Internet Explorer を管理者として実行するように依頼するだけで、ClickOnce ツールも管理者権限で実行されます。

于 2013-10-04T12:18:26.060 に答える
8

時間はシステム全体のものであり、プロセスのためだけに変更することはできません。依存関係に依存する唯一の方法は、Detoursなどを使用してAPIをフックすることです。ユーザーアカウントが少ない場合は許可されません。

時刻を変更するには、「システム時刻の変更」または「タイムゾーンの変更」権限(通常は管理者アカウントに付与されます)が必要です。

また、@ Chrisが述べたように、adminとClickOnceには互換性がありません。

于 2011-04-27T04:13:27.843 に答える
3

IE から ClickOnce アプリを起動する場合、管理者権限を取得するには、IE を管理者権限で実行するだけで、アプリにもそれが適用されます。

于 2013-12-06T12:31:06.843 に答える