Vistaのコマンドプロンプトでアクセスが拒否されたら「管理者で実行」!

上記、sc コマンドでのサービス名変更。ついでに自分のVistaマシンでやってみたら、

C:\Users\shimono>sc config tomcat6 DisplayName= "Apache Tomcat 6.0"
[SC] OpenService FAILED 5:

アクセスが拒否されました。


C:\Users\shimono>

あー。デジャヴっぽ。なんだかこれ見たことがある。昔MySQLのサービス名を変更しようと思って失敗したとき、これみてあきらめたなぁ。。

ひょっとしてコマンドプロンプトも「管理者で実行」すればいいのか?

Microsoft Windows [Version 6.0.6000]
Copyright (c) 2006 Microsoft Corporation.  All rights reserved.

C:\Windows\system32>sc config tomcat6 DisplayName= "Apache Tomcat 6.0"
[SC] ChangeServiceConfig SUCCESS

C:\Windows\system32>

できたー。 なるほどね「管理者で実行」ってsu するイメージなのか。ログインしたときのホームディレクトリも\Windows\system32なんかになってるし。まあ、そのまんまだし、きっとそうだね。うんうん。(今まで「頭でわかっていて体でわかってなかった」感じ)

Tomcat6と5を両方サービスとして動かす

会社のチームで使っているTomcat5.0系が動いてるWindowsマシンがあるんだけど、インストール位置(ディレクトリ)とか諸々が気持ち悪い&Tomcat6.0系を入れてコメットとかいろいろしてみたいということで、そのマシンにTomcat6.0を入れてみたい。

また、起動とかメンドクサイし、気分が出ないのでサービスにしときたい。

まずはTomcat6について、ちょっと調べて、とってきてインストールしてみた。

とってきたTomcatは6.0.14の簡単お気楽exeインストーラ
で、普通にexeファイルを実行してみると・・・やっぱり、なんだか途中で以下のようなエラーが出てしまう。

Failed to install Tomcat6 service.
Check your settings and permissions
Ignore and continue anyway (not recommended)?

もうちょっと親切なメッセージが嬉しいなぁとは思うが、まあこれは想定範囲内。しゃあないということで、で以下などを参考にちょっとがんばってみる。

結論

このサイトのとおりやればOK! すばらしい!
http://www.tec-q.com/note/2007/03/tomcat_56.html

エラーの原因

Tomcat 5と6、普通にインストールすると、どちらもWindowsサービス的には"Apache Tomcat"という表示名(DisplayName)で登録されてしまい名前がぶつかるのがまずい。サービス名としてはそれぞれ"tomcat5", "tomcat6"と分別してるのに・・

対応策

したがって既にインストールされているTomcat5サービスの名前を変更してからTomcat6をインストールすれば普通に入ってしまう。

Tomcat6インストール前にDos窓からこれをやる

D:\tomcat60>sc GetDisplayName tomcat5
[SC] GetServiceDisplayName SUCCESS
名前 = Apache Tomcat

D:\tomcat60>sc config tomcat5 DisplayName= "Tomcat 5.0"
[SC] ChangeServiceConfig SUCCESS

D:\tomcat60>sc GetDisplayName tomcat5
[SC] GetServiceDisplayName SUCCESS
名前 = Tomcat 5.0

DisplayName=のあとにスペースを入れないとエラーになるので注意。


以上をやってからTomcat6をインストールすれば普通に入る。

まあ、Tomcat5のサービス表名前(DisplayName)を"Tomcat 5.0"に変更したのだから、6もデフォルトの"Apache Tomcat"から"Tomcat 6.0"に変更しておこう。

D:\tomcat60>sc GetDisplayName tomcat6
[SC] GetServiceDisplayName SUCCESS
名前 = Apache Tomcat

D:\tomcat60>sc config tomcat6 DisplayName= "Tomcat 6.0"
[SC] ChangeServiceConfig SUCCESS

D:\tomcat60>

ふむふむ。

WindowsサービスをいじるにはDOS窓でscコマンド

ってことを覚えましたです。MySQLを複数入れたりするときにも役立つかな?

VistaでProgram Files内設定ファイルをいじるときは互換性ファイルに注意!

ことのはじまり

Apache2.2を普通にC:\Program Files以下にインストールして、さてと、設定ファイルを書き換えてAliasをきろう・・とやってみた。サーバを再起動してブラウザから確認してみる。

・・あれ? だめ?

おかしいなぁ。と思い設定ファイルをよく見直してみるが、変なところはない。Apache2.2から設定ファイルの記法が変わったのかとか、mod_aliasが読めてないんじゃないかとか色々うたがったが、そうではないみたいだ。

HTML書き換えても反映されない

うーむ。それじゃ、htdocs以下のサンプルHTMLファイルでもいじってみるか・・と、htdocs/index.htmlファイルを書き換え、ブラウザにおもむろにhttp://localhost/と打ち込む・・ えっ?

It works!

って、あーた。 書き換わってないじゃん。しかし、HTMLファイルをそのままブラウザにドラッグ&ドロップしてみると。

Hoge hoge works!

。。。書き換わってるよねぇ。。 何度やっても同じ。ブラウザのキャッシュかと思ったがそうではないようだ。。 何が起こっているのかさっぱりわからない。 ブラウザがいかれたか? ブラウザを全部落として新しいブラウザを使っても、やっぱり状況は変わらず。

もう、何が起こってるのかさっぱりわからず、ウィルスに感染してしまったのか?だとか、そんなことにまで想いはめぐり、私の精神状態はどん底である。

発見

しかし、ふとVistaがなんだか新しいファイルシステムがどうだかそんなことを売り文句にしていたことを思い出した。と、そんな矢先、C:\Program Files\Apache Software Foundation\Apache2.2\htdocを表示しているエクスプローラウィンドウをよく見ると、書き換えたはずのindex.htmlのタイムスタンプが、なぜか2004年とかになっている。

えっ?さっき書き換えたじゃん?

もう一回書き換えてみる。・・しかし、いくら書き換えてもタイムスタンプが変わらない。

あやしい・・と思い、プロパティをみてみる。なんだか良くわからないけど、あんまり変な感じはしない。む? 書き込み禁止? とりあえず書き込み禁止は外しておこう。そしてまた上記フローを繰り返してみる。それでも書き換わらない。

「手詰まり感」と「しのびよる不安」

もうわけわからん。

・・ひょっとして、やっぱりウィルス? ファイルを書き換えても、書き換えたフリだけするウィルス? 最悪。どうしよう。ウィルス感染したら、会社に始末書かかなきゃいけないんだろうなぁ。Apacheインストーラ動かすときMD5とかの確認めんどくさがってやらんかったしなぁ。あー、どうしよう。っていうか、まあ、まだウィルスと決まったわけじゃないけどさぁ。ウィルスだとわかったらすぐにネットワークの線ぶったぎらないとみんなに迷惑かけちゃうしなぁ。っていうか、まあ、それは考えすぎか。ApacheのDNS詐称とかあったら結構大事件になってるはずだし、その気配はないし・・で

も、あぁ・・わけわからん。。

再び光明が

そんな四面楚歌の状況下、精神的にボロボロになっていた私は、何気なくエクスプローラ上にある「互換性ファイル」なんてかかれた怪しいボタン見つけて、無意識で押してみた。 すると、・・

えっ?

ついさっき書き換えたindex.htmlのみが、2008年2月4日(ついさっき)のタイムスタンプで見えるではないか!しかも、アドレスバーにはC:\Users\[user name]\AppData\Local\VirtualStore\Program Files.. なんていう意味ありげなパスが表示されている。

なんじゃこりゃぁぁ!!

「互換性ファイル」とかでググってみると

ざけんなVista

はぁぁ。。そういうことなのかよ。。。 
早くいってくれよVista君よ。。

っていうか、毎度毎度出てくる「管理者で実行しますか?」とか、そういう余計なダイアログはいいから、こういうときこそダイアログ出してくれよ。

なんとVista (自分はUltimate。他はどうだかしらん)はProgram Files以下にあるファイルをいじると”なんの警告もなく”別のところに新たなファイルをつくって、「はい書き換えましたよー」ってフリをしやがるのです。(書き換えを行おうとするユーザとファイルのオーナがマッチしない場合・・だろうけどさ)

・・最悪・・ 俺の1時間を返せ!

いや、たぶんデスクトップアプリなんかを多くのユーザでみんなで使う場合はいいんだろうけどさ・・ Apacheとかサーバアプリの設定ファイルを書き換えたりするとき、「何もいわずに書き換えたフリ」されちゃうと、かなり困るんだけどなぁぁ・・MSお得意の「余計なお世話」機能だと思うよ。しかも、スーパー強烈な。(だって、複数人でPC共有なんて、いまどきあんまりしないし・・) ワードとかの「余計なお世話」ならすぐに見えるからまだいいけど、「こっそり余計なお世話」するのは、ホントやめてほしい。

本題

ということで、教訓!

VistaでProgram Files内の設定ファイルを編集するときは、Vistaの「書き換えたフリ」に要注意!

書き換えたフリをされた場合は、「互換性ファイル」ってボタンを押して、個人ファイルのVirtualStore内に作られた「マイバージョンファイル」をコピペで本当におきたいところ(Program Files)におきましょう。(ここで「管理者として実行」がもとめられます)

っていうか、コピペとかうざいので、こうすることにしました。

Program Filesの中にインストールしない。

設定ファイルを手でいじるようなプログラムをVistaで使うときは注意ってことかな??

この機能、確かに役に立つケースもあるとは思うけど、やっぱり「意識して」使わないとやっぱりユーザは迷うと思う。その意味で、ユーザに対する警告やら通知やらなしで勝手にやっちゃうと「余計なお世話機能」とレッテル貼られてもしょうがないと思うよ。