2017年12月21日木曜日

Windows 10にVB6アプリがインストールできない

最近購入するPCは全部Windows10。業務で使用しているアプリはWindows10対応のものもあるが、中にはWindows XP時代のまま開発が止まってしまったアプリもあり、それらは何とか動かしている。そんな中でこんなことがあった。

 VB6で開発された基幹業務のアプリをWindows10にインストールしようとしセットアップを起動したが、いつまで経っても終了しない。そのうちにアプリが異常終了しましたと表示されて終わってしまった。セットアッププログラムに対して互換性の設定などを色々と変えてみたが効果無し。このパッケージはとあるメーカーのパッケージソフトなのでソースは無いしWindows7には対応しているがWindows10はサポート外。動作しなくて当然のアプリ。そうは言ってもそのアプリが動作してくれないと困る。

 そこでいつものSysinternalsSuiteのProcmon.exeが登場。セットアップ中の動作を観察しているとC:\Windows.oldフォルダーの中を探している。ひょっとしてシステムフォルダーとしてこの中を探していて何か問題が発生しているのかも。そう思い、このC:\Windows.oldフォルダーを削除してみたら、ビンゴだった。セットアップは普通に終わった。

 C:\Windows.oldフォルダーはOSを以前のバージョンに戻すために必要なフォルダーなので、購入したばかりのPCでは以前のバージョンに戻す事は無いと判断し削除してしまった。


2017年10月13日金曜日

Windows 10 パソコン起動時にEdgeが勝手に立ち上がる

 Windows10のセットアップをこなし始めた今日この頃。今日も1台セットアップ。セットアップ中はインターネットに接続可能にしていたが、このPCはインターネットへの接続は禁止のPCなので、F/Wでブロックをした。すると、ログオンするとなぜかEdgeが立ち上がり以下の画面が表示される。

 不思議に思いブロックされているurlを閲覧してみると
MSN Japanが表示された。

 なぜ????

 念の為、再起動しても相変わらずEdgeが勝手に立ち上がる。

 Sysinternals Suiteのautoruns.exeでマイクロソフトのアプリで悪さをしてそうなやつを順番に止めてみた。しかし、相変わらずEdgeが勝手に立ち上がってしまう。

 ネットで検索したら原因判明。
 Windows IT Centerに記載あり。
 https://docs.microsoft.com/ja-jp/windows/configuration/manage-connections-from-windows-operating-system-components-to-microsoft-services
 この頁の”13. ネットワーク接続状態インジケーター”に理由と対処方法が書いてあったので、私はグループポリシーを設定した。

 これにてログオン時にEdgeが勝手に開く件は一件落着した。とはいえ、この設定をすることでNCSI(ネットワーク接続状態インジケーター)がデバイスがインターネットと通信できるかどうかを判別しなくなるので、設定する人はそれで良いのかの判断が必要。

 しかし、この対処をするまでに4時間もの時間を費やしてしまった。

 Edgeが勝手に立ち上がるのはネットワークに接続されているときで、ログオン時にネットワークに接続されていないとEdgeは勝手に立ち上がらない。しかし、ネットワークに接続されるとEdgeが勝手に立ち上がる。

2017/10/17 追記
 危惧していた事が起こった。インターネットに接続可能なPCにも同じ設定を行ったところ、OneNoteで「インターネット接続がありません」と表示されてしまい、OneDriveに保存してあるOneNoteのファイルが開けなくなった。NCSIが正しく判別しなくなることで他にも影響が出るかもしれない。

2017年10月5日木曜日

Microsoft Data Access Components 2.0 セットアップが終了しない

 VB6で開発されWindows 7で使用していたアプリがWindows 10の環境で使用可能か検証をした。

 セットアップを実行すると、Microsoft Data Access Components 2.0 セットアップの画面が表示されファイルがコピーされていたが、いつまで経ってもセットアップが終了しない。この画面のまま先に進まない。ひょっとするとハングアップしたかも。



タスクマネージャーで確認してみるとこんな状況。
 ODBC Driver Configuration Program(32ビット)がCPUを半分使用している。私のPCのCPUは2コアでほぼ100%の負荷。ループしているかな。

 今回のアプリは自分で開発したものではないのでソースはなく調べるのが大変かなと思いながらも、マイクロソフトのSysinternalsSuiteに含まれているProcmon.exeで調べてみると、odbcconf.exeがレジストリのI/O処理でループしている。

Procmon.exeに表示された情報で関係していそうな情報。
18:10:26.2519258 odbcconf.exe 4564 RegOpenKey HKCR\RDSServer.DataFactory\Clsid SUCCESS Desired Access: Maximum Allowed, Granted Access: Read
許可されたアクセス(Granted Access)が読み取りのみになっている。

 odbcconf.exeに関係していそうなレジストリのキーは以下の二つ。
HKEY_CLASSES_ROOT\RDSServer.DataFactory
HKEY_CLASSES_ROOT\RDSServer.DataFactory\Clsid
これらの2つのキーに対するアクセス許可を確認すると、Administratorsグループは読み取りのみでフルコントロールは与えられていない。試しに、Administratorsグループに対してフルコントロールを与えると、その瞬間にセットアップは正常に終了した。

Procmon.exeに表示された情報で関係していそうな情報。
18:14:35.4679275 odbcconf.exe 4564 RegOpenKey HKCR\RDSServer.DataFactory\Clsid SUCCESS Desired Access: Maximum Allowed, Granted Access: Read, Write DAC
許可されたアクセス(Granted Access)にWrite DACが追加されている。

 もし、Microsoft Data Access Components 2.0 セットアップが終了しない場合は、
HKEY_CLASSES_ROOT\RDSServer.DataFactory
HKEY_CLASSES_ROOT\RDSServer.DataFactory\Clsid
の2つのアクセス許可を確認してみると良いかもしれない。いつものことですが、レジストリの変更は自己責任でお願いします。当然のことながら、該当キーを変更前にバックアップは必須です。




2017年7月28日金曜日

Windows 10がインストールされたPCでBIOS画面を表示する

 わが社にもやっとWindows 10のPCが登場。OSをインストールし、アプリをセットアップして使い始めた。ある時、BIOS画面を表示しようとしたらどうにもこうにも出来ない。

 今回のPCはPanasonicのLet's note CF-SZ6。マニュアルには電源投入後、Panasonicのロゴが表示されている間に[F2]を押下すると書いてあるが、何度やってもだめ。おっかしいなぁ、キーが壊れているのかと思ってしまった。サポートに電話すると、Windows 10の高速スタートアップが有効になっていると[F2]を押下しても駄目だそうで正しいやり方を教わった。

 BIOSを表示する場合は、シャットダウンの操作が重要。シャットダウンする際に、[Shift]キーを押下しながら、シャットダウンボタンをクリックしてシャットダウン。このシャットダウンはいつものシャットダウンよりも時間がかかるのでじっと我慢の子。そして、電源が切れてから電源を投入すると通常の起動になるので、この時に[F2]を押下すればめでたくBIOS画面に再会できるという訳だ。

 この[Shift]+シャットダウンで電源を切る方法は、Windows 10のPCであれば皆共通だと思う。

2017年7月21日金曜日

http://g.ceipmsn.comに1秒間隔で接続している

いつもの様にネットワークのSYSLOGをチェックしていると、社内の1台のPCから
http://g.ceipmsn.com/8se/411?mi=12b00046cc3e4b66bfb4fb020e418c0a-0&lv=3.0.126.0&os=6.1.7601&ag=2415
に1秒間隔で接続している履歴が見つかった。

WHOISでceipmsn.comを調べるとマイクロソフト。また、マイクロソフトか。今度は何のサービスが悪さをしているんだ?ネットで検索するとWindowsのサービスでSeaPortというサービスがここに接続しているらしいことが判明。

このサービスの説明を見ると、
Enables the detection, download and installation of up-to-date configuration files for Microsoft Search Enhancement applications. Also provides server communication for the customer experience improvement program. If this service is disabled, search enhancement features such as search history may not work correctly.

ネットで日本語に翻訳すると、
Microsoft Search拡張アプリケーション用の最新の構成ファイルの検出、ダウンロード、およびインストールを有効にします。また、顧客体験向上プログラムのためのサーバー通信を提供します。このサービスを無効にすると、検索履歴などの検索機能が正しく機能しないことがあります。

との事。

因みに、私のPCには本サービスは入っていない。

それならば、このPCで本サービスを停止しても問題ないだろうと判断し、サービスを停止すると共にスタートアップの種類を無効にした。

結果は、接続しなくなった。無駄にリソースを消費するサービスを潰せた。

2017年6月13日火曜日

ROBOCOPYでアクセスが拒否されましたが表示される

 最近、システムの入替作業を進める中で、業者からROBOCOPYなる使えるユーティリティがあることを教わった。使ってみるととても便利だ。今まではXCOPYでサーバー間のファイルコピーをしていたが、ROBOCOPYの方が元々そういった目的で開発されたユーティリティらしく機能も豊富だ。

 使用しているうちに欲が出てきて、このROBOCOPYを使ってバックアップもしたくなった。パラメーターを指定してバックアップを実行すると、殆どのファイルのバックアップは正常に終了するのだが、一部のファイルに”エラー 5 (0x00000005) ファイルをコピーしています・・・アクセスが拒否されました。”なるエラーメッセージが表示されバックアップが出来ないものがある。

 教えてくれた業者も詳しくはないらしく、周りにも詳しい人間が居ないのでネットで解決策を探した。殆どの問題は解決できたが、一部の問題については解決策が見つからない中、自分なりの方法で解決できたのでご紹介。

・環境
SV1:Windows Server 2012 R2
SV2:Windwos Server 2008 R2
SV3:TeraStation ※このTeraStationが曲者だった。

SV1上でROBOCOPYを起動し、SV2に保存されているデータをSV3へミラーリングコピーする。


・実行したコマンド
set logfile1=C:\HOGE.LOG
set src1=A:\HOGE1
set dest1=B:\HOGE2

robocopy %src1% %dest1% /b /s /purge /copy:DT /R:1 /W:30 /fft  /log+:%logfile1%

※コピーが失敗したので変更した引数
copy:DT 最初にcopy:DATで実行したらエラーが発生。TeraStationにはファイルの属性をコピー出来ない様なのでcopy:DTに変更した。


・結果
殆どのファイル(350,803/350,806件)は正常にコピーが完了しているのに、一部のファイル(3/350,806件)でエラーが発生している。例えば、
2017/06/09 03:10:13 エラー 5 (0x00000005) ファイルをコピーしています A:\HOGE1\構成\2017.6.7構成リスト.xls
アクセスが拒否されました。


・調査
 ”アクセスが拒否されました。”って何?だって、ROBOCOPYを実行しているログインIDでファイルが開ける。開けるのにアクセスが拒否されましたとはどういうこと???? 
UACも無効にしてあるのに。※UACを無効にしている理由はネット上に沢山書き込んであるので割愛。因みに、UACを無効にしていないと以下の手順を実施してもダメな可能性がある。私は試していないので分からないが。

 試しに、複写先をNTFSでフォーマットされたHDDに変更してみると正常にコピーが完了する。どうやらTeraStaionがらみの様だ。

 ファイルのプロパティでセキュリティ情報を表示しても問題なし。しかし、ここで全般情報を表示するとこんなメッセージが。
セキュリティ:このファイルは他のコンピューターから取得したものです。このコンピューターを保護するため、このファイルへのアクセスはブロックされる可能性があります。

 ”ブロックされる可能性があります。”なんて書いてある。原因はこいつか?早速、「ブロックの解除」クリックして解除してみる。その後、ROBOCOPYコマンドを実行すると正常にコピー出来た。やはりこいつが原因かも。しかし、このセキュリティが表示されるファイルは沢山ある。沢山ある中のたった3つだけがエラーするとは流石は”可能性がある”と書いてあるだけの事はあるな。


・対処
 このセキュリティの情報はNTFSの代替データ・ストリーム(ADS)と呼ぶそうだ。ADSについてはネットで調べてもらうとして、今回のコピーが失敗した原因はこのADSをTeraStaionにコピー出来ないことが原因の様な気がする。だってTeraStaionのフォーマット形式はXFSでありNTFSではないから。ならばこのADSを削除してやればコピーは上手くいくかもしれない。そんなときに便利な、ADSを一気に削除するコマンドが存在する。

 そのコマンドはStreams。これもネットで入手可能。私が使用したstreamsはバージョン1.60

 コマンドプロンプトを開いて、A:\HOGE1に移動し、実行したコマンドがこれ。
 streams -d -s *

 引数の意味
 -d メイン・データ・ストリーム以外のストリームを削除。
 -s サブフォルダも再帰的にスキャンする。

 このコマンドを実行後、再度ROBOCOPYコマンドを実行したらエラーは発生しなかった。

 ROBOCOPYを起動するバッチの先頭にこのStreamsコマンドを追加し、コピー前にはADSを削除する様にして解決。

 因みに、当社のサーバーでstreamsを実行してみたら、ADSとして、:Zone.Identifier、:OECustomProperty(拡張子が.eml)、:encryptable(ファイル名がThumbs.db)が存在していた。

2017/07/07 追記
無限ループに陥らないように、コマンドに一つオプションを追加
robocopy %src1% %dest1% /b /s /purge /copy:DT /R:1 /W:30 /fft /log+:%logfile1% /xj