プログラミング

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

2021/5/12 追加
AdobeReaderの最新版では、上記の不具合が解消されているようです。
また、対策方法については、CD-ROM内のPDFには使えないという状況が発生しています。
バージョンアップ時には、その都度、確認をお願いします。

 

 

 

【C#備忘記】コンソールアプリで、コンソールをマウスクリックすると停止する場合の対策

デバッグのためC#でコンソールアプリを作成することが多いのですが、作成したWindowsコンソールアプリのコンソール上をマウスでクリックするとプログラムが一時するようになっているようです。どこに設定があるのか、どのように対策すればいいのか、検索しても見つからず、数年困っていました。ただデバッグ用なのでそれほど念入りに探していたわけではありません。

先日もコンソールアプリを使っていて不便に感じて調べたところ見つかりました。

https://qiita.com/gdofrank/items/64d13e364b773246f72d

コンソールの簡易編集モードが有効になっているからでした。コンソールのプロパティで変更したら停止しないようになりました。

また、C#のプログラムでこの設定を無効にする方法は下記に書かれていました。

https://teratail.com/questions/99011

上記はプログラミング情報サイトのため内容を引用するのは控えさせていただきます。詳細については上記リンク先で確認をお願いします。

上記の2つのサイトの情報提供者に感謝いたします。

【備忘記】Visual Studio 2019 で それまで使っていた Installer Project が、突然[非互換]と表示されたときの対応

仕事で使用している Visual Studio を 2015 , 2017 ,2019 を使用しています。
Installer Project を使用しているので、それぞれのバージョンで読み込みできるように設定していました。
ところが、昨日 Visual Studio 2019 でソリューションを開くと、Installer Projectで作成したプロジェクトが[非互換]と表示されるようになりました。プロジェクトの右クロックで”再読み込み”をしても、警告のダイアログが出るだけで読み込めません。

そこで、Visual Studio の他のバージョンでも確認したところ、2015 と 2017 では読み込めています。その後、もう一度 Visual Studio 2019 で開いても、やはり[非互換]となります。

仕方ないので、数時間かけてVisual Studio 2019 をアンインストールし、再インストールしてみました。
しかし、それでも変わらず[非互換]と表示されます。”再読み込み”をしても変わらず。

次の行ったことは、Visual Studio Installer Project のアンインストールをして、Visual Studio 2019 用 の Installer Project をインストールしました。インストールは Visual Studio のメニューの「拡張機能の管理」でもできるようですが使っていません。
ソリューションを開くと、同じく[非互換]と表示されましたが、”再読み込み”を行ったところ、読み込みできるようになりました。

Visual Studio 2015 で開くと開けなくなったので、Visual Studio 2015 用のInstaller Project をインストールすると、一旦[非互換]となりますが、”再読み込み”で読み込めるようになりました。

Visual Studio 2017 はその後試したので、どちらで読み込めたか分かりませんが読み込めていました。

後になって振り返ってみましたが、数日前に Visual Studio 2019 の更新をしていました。それが原因だったと思います。

【同じ状態になっている方へ】
私は Visual Studio のアンインストールを最初にしましたが時間がかかるので、Installer Project のアンインストール→再インストールを最初に試してみた方が良いと思います。

VisualBasic.NETの思想

VisualBasic.NETの思想がだんだん見えてきました。
日本語だったら直ぐに分かったと思いますが
私が使っていたのは英語版なのでです。
変換したところにコメントが入っていたのですが、英語が苦手なので無視していました。
今日読んでみたら、クリックすると修正の方法の書いてあるページを表示してくれることに気が付きました。
修正していくと、素直に修正できない部分が出てきました。
何か変だと思って、マイクロソフトのページを読んだら、今までの仕様のアップグレードにしたのではなく、新たに作ったためにそのようになったようです。
理由は今までVisualC VisualBasic などを動かすときに使うランタイムはコンパイラ毎にありました。
でも、それを共通化し、OSに依存しない環境を作りたかったようです。
JAVAの思想を真似たような気がしませんか?

VisualBasc.NETへのバージョンアップ

今までVisualBasic Ver6 で作成してたのですが、.NETにバージョンアップすることになりました。
古いバージョンのプロジェクトも読み込んで新しいバージョンに変換してくれるのは良いのですが、完全に変換をしてくれるわけではないようです。
まず最初に気が付いたのは、LINEのコンポーネントがないです。LABELを使って背景色で色を付けています。その上、プロパティーが違うので一つ一つ変換しないといけません。
今作っているのがLINEを沢山使っていて、もう大変です。
その他にもありそうなのですが、どこをどうしたらいいのでしょう。
ネットで検索しても出てこないのです。
誰か教えて!