【C#備忘記】管理者モードアプリから Adobe Reader を起動できない時の対策

C# のプログラムからPDFファイルを開く場合、あちこちで紹介されている方法で開くことが出来ます。

C#.Netでファイルを開くまたは起動する方法PDF Files?

しかし、管理者モードのアプリの場合は問題があります。有料の Adobe Acrobat DC  なら問題ないのですが、無料の Adobe Acrobat Reader の場合、様子が変わります。

タスクマネージャーで確認すると、起動されているもののフォームが表示されずに停止しているようです。

この対策について、日本語サイトでは見つかりませんでした。

理由としては、管理者モードのアプリから他のアプリを起動すると、そのアプリも管理者になるようです。そのため次の方法を試しました。

  • Adobe Reader アプリにPDFを引数として起動
  • Processクラスで管理者モード指定を無効にして起動
  • 別アプリを作って起動する。
  • バッチファイル経由で起動する。

これらの方法では解決しませんでした。
英語サイト検索の得意な知人が対策方法を見つけてくれました。

How to start a new process without administrator privileges from a process with administrator privileges?

11番目のソースでも起動できたのですが、コンソールが開いてしまうので、美しくないです。
8番目(先日は7番目でした)をちょっと変更することで出来ました。

変更したソースはこんな感じです。

void RunAsDesktopUserLite(string argument)
{
  var proc = new System.Diagnostics.Process
  {
    StartInfo = new System.Diagnostics.ProcessStartInfo
    {
      FileName = “explorer.exe”,
      Arguments = argument,
      UseShellExecute = true,
      Verb = “runas”,
      WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden
    }
  };
  proc.Start();
}

引数の argument にPDFファイルを指定すると、コンソールもエクスプローラも開かずにAdobe Reader で PDF ファイルを開きました。

OSのバージョン、今後の更新で使用できなくなる可能性はありますが、もしお困りの方がおられましたら、お試しください。