C# のプログラムからPDFファイルを開く場合、あちこちで紹介されている方法で開くことが出来ます。
C#.Netでファイルを開くまたは起動する方法PDF Files?
しかし、管理者モードのアプリの場合は問題があります。有料の Adobe Acrobat DC なら問題ないのですが、無料の Adobe Acrobat Reader の場合、様子が変わります。
タスクマネージャーで確認すると、起動されているもののフォームが表示されずに停止しているようです。
この対策について、日本語サイトでは見つかりませんでした。
理由としては、管理者モードのアプリから他のアプリを起動すると、そのアプリも管理者になるようです。そのため次の方法を試しました。
- Adobe Reader アプリにPDFを引数として起動
- Processクラスで管理者モード指定を無効にして起動
- 別アプリを作って起動する。
- バッチファイル経由で起動する。
これらの方法では解決しませんでした。
英語サイト検索の得意な知人が対策方法を見つけてくれました。
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のバージョン、今後の更新で使用できなくなる可能性はありますが、もしお困りの方がおられましたら、お試しください。
2021/5/12 追加
AdobeReaderの最新版では、上記の不具合が解消されているようです。
また、対策方法については、CD-ROM内のPDFには使えないという状況が発生しています。
バージョンアップ時には、その都度、確認をお願いします。