Intune を入れて、PC のアプリの多くは Intune から配れるようになった。それでも、業者が作った社内の業務システムだけは、新しい PC のたびに手で入れている。インストーラーがなく、「納品フォルダを C:\ にコピーして、ショートカットを作る」作りだからだ。
インストーラーがないことは、Intune で配れない理由にならない。コピーとショートカットの作成をスクリプトにして包めば、Win32 アプリになる。難しいのは包む作業より、前任の手順書のどこが今も要るかを見極めるほうだった。
ある会社(30名規模)で、新入社員の PC のキッティングに合わせて、この業務システムを Win32 アプリにした。手順書には Oracle クライアントの導入と設定が並んでいたが、納品フォルダの中身を見て「要らない」と見立て、パイロットの1台で確かめた。Oracle クライアントを入れずに起動し、1本目のアプリにはログインできた。2本目のログインは、ID の発行待ちでまだだ。
この記事でわかること
- ▶ 手順書より先に納品フォルダを見て、要らない手順を見極める方法(今回は Oracle クライアントの導入を外した)
- ▶ インストーラーのないアプリを Win32 アプリにするスクリプトの中身と、検出の目印の作り方
- ▶ アンインストールでフォルダを消さないと決めた理由
- ▶ パイロット1台で確かめたこと・まだ確かめていないこと
▼背景:業務システムだけは、NAS の納品フォルダから手で入れていた
この業務システムは、業者が作ったものが「納品フォルダ」の形で渡されていた。同じ作りのアプリが2本あり、それぞれ別のデータベースにつなぐ。インストーラーはない。
前任の手順書では、新しい PC に入れる作業が8つあった。
| # | 前任の手順書の作業 |
|---|---|
| 1 | NAS で最新の納品フォルダを探す |
| 2 | 2本のフォルダを C:\ 直下にコピーする |
| 3 | exe へのショートカットをデスクトップに作る |
| 4 | (必要なら)Access Runtime(32ビット)を入れる |
| 5 | (必要なら)Oracle クライアントを入れ、Net Manager で接続先を登録し、sqlnet.ora を書き換え、ファイアウォールで許可する |
| 6 | Access の「信頼できる場所」に2本のフォルダを登録する |
| 7 | 確認用の ID でログインし、決まった画面で検索して動作を確かめる |
| 8 | 利用者の ID を発行してもらう |
手順書には「(必要なら)」が多く、どの PC で何が要るのかは書かれていない。
ただ、困っていたのは手作業の多さより、配る元が NAS と前任の手順書にしか無いことだった。この会社は NAS を止める方針で、止めれば納品フォルダの置き場所が無くなる。新入社員の PC をキッティングする機会に、配る元ごと Intune に移すことにした。
▼手順書の8つのうち、Oracle まわりは納品フォルダを見て外した
前任の手順書は、古い版の前提を引きずっていることがある。今の納品物が何に依存しているかは、手順書ではなく中身で判断する。今回見たのは、同梱されているライブラリ(DLL)と、exe の設定ファイル(.exe.config)の2つだ。
同梱の DLL と設定ファイルで、Oracle クライアントの要否が分かる
納品フォルダを開くと、起動する exe は .NET Framework 4.8 のアプリだった。同じフォルダに Oracle.ManagedDataAccess.dll が置かれていた。Oracle が出している .NET 用の接続ライブラリ(ODP.NET)の、Managed Driver と呼ばれる版だ。Oracle が NuGet で配っているこのパッケージの説明には、接続に Oracle クライアントの追加インストールは要らない、と書かれている。
次に設定ファイルを見た。接続先は「TNS の別名」ではなく、ホスト・ポート・サービス名を含む接続記述子がそのまま書かれていた。2本のアプリは同じ名前の exe と同じ接続ライブラリを持ち、接続先のサービス名が違う。tnsnames.ora も sqlnet.ora も、フォルダには入っていなかった。
この2つがそろえば、PC 側に Oracle クライアントを入れる必要も、Net Manager で接続先を登録する必要もない、と見立てた。見るところを表にしておく。「Oracle クライアントが要るか」と「tnsnames.ora が要るか」は別の問いなので、列を分けた。
| 見るところ | こうなっていたら | Oracle クライアント | tnsnames.ora |
|---|---|---|---|
| 同梱の DLL | Oracle.ManagedDataAccess.dll(マネージド)← 今回 |
不要 | 下の「接続先」で決まる |
| 同梱の DLL | Oracle.DataAccess.dll(非マネージド) |
要る(Oracle クライアントのライブラリを読み込む作り) | クライアント側の設定に従う |
| 設定ファイルの接続先 | 接続記述子(ホスト・ポート・サービス名)か Easy Connect の形で直接書いてある ← 今回 |
— | 不要 |
| 設定ファイルの接続先 | 別名だけ。ただし同じ設定ファイルの dataSources に別名と記述子が書いてある |
— | 不要 |
| 設定ファイルの接続先 | 別名だけで、dataSources もない |
— | 要る(置き場所を TNS_ADMIN で示す)。マネージドならファイルを置くだけで、クライアントのインストールは要らない |
手順書の Oracle の手順は、今の納品物より前の版に合わせたものだった。sqlnet.ora の書き換え(認証の方式を NTS から NONE に)やファイアウォールの許可が何のためだったのかは、手順書に書かれていない。目的が分からないまま「たぶん要らない」と消すのではなく、今の納品物の中身から要らない理由を言えるかどうかで判断した。言えたのは、上の2つ(Managed Driver と、接続記述子が設定ファイルにあること)がそろっていたからだ。
見立ては見立て。確かめたのは1本目のログインまで
中身から言えるのは「見立て」までだ。確定は、パイロットの1台に入れて起動させてからになる。見立てが外れても、影響はパイロットの1台で止まる。
結果、Oracle クライアントを入れていない PC で起動し、1本目のアプリに確認用の ID でログインして、中身を見られた。1本目については、Oracle クライアントは要らないことが確定した。
2本目は同じ作りで、接続先のサービス名が違う。こちらのログインは、ID の発行待ちでまだ確かめていない。
Access は残る:帳票が Access のファイルだった
削れない前提もあった。帳票は Access のファイル(.accdb)で、Access で開く。だから Access と「信頼できる場所」の設定は今も要る。前任の手順書にも「Windows 11 では信頼できる場所が未設定だと、帳票の印刷でエラーになる」と書かれていた。
手順書の4つ目にあった Access Runtime(32ビット)は、パイロットの PC には入れていない。手順書は Access の32ビット版を前提にしていた。今の PC の Microsoft 365 の Access で帳票が動くかは、印刷と合わせてまだ確かめていない。PC の Office が64ビット版なら、確かめるときに最初に疑うのは、帳票の VBA の Declare 文に PtrSafe が無いとコンパイルエラーになる点だ。
1.3GB のうち 1.1GB は過去のログ。配るものを決めてから包む
納品フォルダの大きさは、2本で 1.2GB と 105MB、合わせて約 1.3GB あった。ところが、そのうち 1.1GB はアプリの中のログのフォルダに溜まった過去のログだった。
ログの中身を除いて(フォルダだけは空で残して)コピーすると、約 220MB になった。それを Win32 アプリとして梱包すると 69MB になった。納品フォルダを「そのまま」包まず、何を配るかを決めてから包む。
▼インストーラーがなくても、コピーとショートカットをスクリプトにすれば Win32 アプリになる
Win32 アプリは「インストーラーを包むもの」と思われがちだが、実際は「スクリプトを包めるもの」だ。手順書の手作業をそのまま PowerShell のスクリプトにして、何度実行しても同じ状態になるように書く。インストールは「システム」として実行する。
梱包(.intunewin)の作り方、32ビットで起動されたときに64ビットで起動し直す処理、ログの置き場所は、同じ会社でプリンターのドライバーを配ったときと同じなので、こちらの記事に任せる。
インストールでやること(検出の目印は自分で作る)
- ① 2本のフォルダを C:\ 直下にコピーする(robocopy。上書きなので、すでに手で入れた PC のログは残る)
- ② 一般ユーザー(Users)に、2本のフォルダの変更の権限を付ける(アプリがフォルダの中にログを書くため。C:\ 直下は既定でも一般ユーザーが書ける可能性が高く、この手順が要るかは確かめていない)
- ③ 共通のデスクトップ(Public Desktop)に、2本の exe へのショートカットを置く
- ④ レジストリ(HKLM)にパッケージの版を書く
④が検出の目印になる。MSI やインストーラーで入れたアプリなら、Windows の「アプリと機能」に名前と版が登録され、Intune はそれで「入っているか」を判定できる。フォルダをコピーしただけのアプリは、どこにも何も登録されない。だから検出の拠り所を自分で作る。
検出のスクリプトは、目印の版・2本の exe・2つのショートカットがすべてそろっていれば「入っている」と返す。版は「納品日+パッケージの版」の形(例:20250401.1)にした。開発元から新しい納品物が来たら、インストールと検出の両方の版を上げる。検出が外れて、入れ直しが走る。
アンインストールでフォルダを消さない
アンインストールのスクリプトで消すのは、ショートカットと目印だけにした。C:\ のフォルダは残す。
フォルダの中のログは、利用者の操作の記録だ。Intune の割り当てを外しただけでそれが消えると困る。アンインストールは「元に戻す」ではなく「Intune の管理から外す」と決めて書いた。フォルダを消すかどうかは、人が判断して手で消す。
「信頼できる場所」は Win32 に入れず、設定カタログで配った(効いたかは未検証)
Access の「信頼できる場所」は、利用者ごとの設定(HKCU)だ。一方、インストールのスクリプトは端末に一度走れば終わり、検出が通っている限りもう走らない。あとからその PC にサインインする人の分まで面倒を見られない。そこで、この設定はスクリプトに入れず、設定カタログで配った。
| 項目 | 単位 | 配り方 |
|---|---|---|
| フォルダのコピー・権限・ショートカット・目印 | 端末 | Win32 アプリ(インストールのスクリプト) |
| Access の信頼できる場所(2本のフォルダ) | 利用者 | 設定カタログ(Access の「Trusted Location #1・#2」) |
設定カタログの Access の項目には「Trusted Location」が #1 から #20 まである。#1 と #2 にそれぞれフォルダのパスを入れ、サブフォルダも許可した。このポリシーは、Win32 アプリと同じ端末のグループに割り当てた。Microsoft Learn には、利用者単位の設定を端末に割り当てると、その端末を使うすべての利用者に適用される、と書かれている。新しい PC は、グループに入れるだけでアプリと設定の両方が来る形になる。
未検証:この設定が効いたかは、まだ確かめていない
効いたかどうかは、帳票を印刷してエラーが出ないかで確かめる。その印刷を、まだやっていない。効かなかったときは、①最初の同期では利用者単位の設定が「適用外」と出ることがある(サインイン後の同期を待つ)、②別のポリシーで「すべての信頼できる場所を無効にする」が有効になっていないか、③そもそも帳票が今の Access で動くか(前の節)、の順に見る。
▼パイロット1台で確かめたこと・まだのこと
パイロットは新入社員の PC の1台だけで行った。「入った」「起動した」で終わらせず、手順書の動作確認のうち、確認用の ID でのログインまでやった。VPN につないだ状態でも、1本目にログインできた(VPN 側の受信量が増え、VPN 経由で DB に届いたことも確かめた)。
確かめていないことは、こうだ。
| まだのこと | 状態 |
|---|---|
| 2本目のログイン | ID の発行待ち |
| 帳票の印刷(信頼できる場所が効いたか、今の Access で帳票が動くか) | 未確認。印刷のエラーが出るのは2本目の側なので、2本目の ID が出てから |
| すでに手で入れた PC への展開 | まだ。割り当てはパイロットの1台だけ |
▼配る元が NAS から Intune に移った。更新はこう回す
一番の成果は、手作業が減ったことより、配る元が NAS から Intune のパッケージに移ったことだ。NAS を止める計画の障害が、1つ消えた。前任の手順書の8つは、今こうなっている。
| 前任の手順書の作業 | 今 |
|---|---|
| NAS で納品フォルダを探す | Intune のパッケージが原本 |
| コピー・ショートカット | Win32 アプリ(グループに入れるだけ) |
| Access Runtime(32ビット) | 入れていない。要るかは帳票の印刷で確かめる |
| Oracle クライアント・Net Manager・sqlnet.ora・ファイアウォール | 不要(1本目のログインで確認) |
| 信頼できる場所 | 設定カタログ(効いたかは未検証) |
| 動作確認・利用者の ID の発行 | 残る(ここは人がやる) |
開発元から新しい納品物が来たときは、こう回す。
- ① 新しい納品物から、ログの中身を除いてパッケージの中身を差し替える
- ② インストールと検出のスクリプトの版を上げて、梱包し直す
- ③ Intune の既存のアプリに、新しい版として上げる
このアプリは「必須」で割り当てているので、新しい版を上げれば、すでに入っている PC にも入り直す。同じ日に、勤怠のアプリ(KING OF TIME)も Intune 側の版を上げたが、こちらは「利用可能」の割り当てなので、すでに入っている PC には自動では入らない。
まだ終わっていないこと:パッケージの原本の控えを SharePoint に置く作業は、まだやっていない。原本が Intune の中にしか無いのも、それはそれで一か所に頼っている。控えを置いて、初めて NAS から卒業できる。
▼まとめ
- ▶ インストーラーがなくても、「コピーしてショートカット」の作りならスクリプトで包めば Win32 アプリになる
- ▶ 手順書の前提は、納品物の中身(同梱の DLL と設定ファイル)で確かめる。Managed Driver で、接続記述子が設定ファイルにあれば、Oracle クライアントの導入は要らない
- ▶ 中身から言えるのは見立てまで。パイロットの1台で起動とログインまで確かめて確定させる
- ▶ 納品フォルダはそのまま包まない。ログを除いて 1.3GB が約 220MB に、梱包して 69MB になった
- ▶ 検出の目印は自分で作り、更新のたびに版を上げる。アンインストールはフォルダを消さない
📅 30分無料相談、受け付けています
「業者が納品したフォルダを、手順書どおりに毎回手で入れている。Intune で配れるのか、手順のどこまで削っていいのか判断できない」——そういった段階からお気軽にどうぞ。納品物の中身を見るところから一緒に整理します。
📅 30分無料相談を予約する →