2007/5/6 (日) 00:06:11 ryoji  
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SV1; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.0.04506; .NET CLR 1.1.4322; InfoPath.2)
[4800] Vista UAC機能対応について
以下、拡張子連動設定(sakuext.exe)の話ですが...
SakuraDownにも関係するかも(自分は普段は使用してないので動作未確認)。
サクラをProgram Files配下にインストールしている場合は何やら複雑なこと
になってしまいます。

>>data:6050の件
sakuext.exeに管理者権限実行用のマニフェストを適用すれば、普通の操作で
起動した場合でも自動的に「ユーザーアカウント制御」ダイアログが出るよう
になり、レジストリ変更が可能です。
(現状、普通に実行すると黙って動くがレジストリは変更されない)

●sakuext.exe.manifestファイルの記述内容
---ここから
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> 
<assemblyIdentity
     version="1.0.0.0"
     processorArchitecture="X86"
     name="sakuext.exe"
     type="win32"
/>
   <!-- Identify the application security requirements. -->
   <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
        <security>
            <requestedPrivileges>
                <requestedExecutionLevel level="requireAdministrator"/>
            </requestedPrivileges>
        </security>
   </trustInfo>
</assembly>
---ここまで

マニフェストは外部ファイルとして提供するのではなく実行ファイルに埋め込ん
でしまうほうが良いと思います。
が、以下の方法で公式配布されているsakuext.exeに埋め込んでみたところ、
「無効なEXEです」で異常終了してしまいました。
sakura.exeは同様の方法でできたんですが。。。
配布版のsakuext.exeって、ファイル圧縮等の処置が施されてたりしますか?

●マニフェストの埋め込み方法
コマンドラインでmt.exeを実行する(mt.exeは最新のPSDKやVS2005に入っています)。

コマンド例:
mt -manifest sakuext.exe.manifest -hashupdate -outputresource:sakuext.exe;1

>>data:6051の件(参考:>>data:5925)
普通にサクラを使用している場合、VirtualStoreフォルダにiniが作成されます。
管理者権限でsakuext.exeを実行すると自フォルダ内のiniを参照しに行きます。
どうしましょ?

2007/5/6 (日) 01:00:40 すい  
INCM1.23c
[4801] RE: Vista UAC機能対応について
>マニフェストは外部ファイルとして提供するのではなく実行ファイルに埋め込ん
>でしまうほうが良いと思います。
>が、以下の方法で公式配布されているsakuext.exeに埋め込んでみたところ、
>「無効なEXEです」で異常終了してしまいました。
>sakura.exeは同様の方法でできたんですが。。。
>配布版のsakuext.exeって、ファイル圧縮等の処置が施されてたりしますか?


ソースを見て頂けば一目瞭然なのですが、これは HSP で作成してあります。
HSP で作成された .EXE はその手の後加工は不可能です。

マニフェストを埋め込む、ちょっと特殊なコンパイル方法も
HSP のヘビーユーザーによって開発されていたように思いましたが、
私の手元には確認環境などがありませんし...

2007/5/7 (月) 00:09:22 ryoji  
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SV1; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.0.04506; .NET CLR 1.1.4322; InfoPath.2)
[4802] Re2: Vista UAC機能対応について
▼ すいさん
> ソースを見て頂けば一目瞭然なのですが、これは HSP で作成してあります。
> HSP で作成された .EXE はその手の後加工は不可能です。


これは確認してませんでした。m(__)m

補足ですが、埋め込みにしておいたほうが良い理由のひとつに、Vistaでは初回起動時に外部マニフェストが無いと後で追加しても適用されない、というのがあります。
外部マニフェストだけでなくEXEのほうを更新しても適用されないので、バージョンアップするだけではたぶん意図したとおりに動いてくれません。
※そういう場合にはいったんEXEをXP互換モードで動かせば適用される
sakura.exeをビジュアルスタイル化するのも今は外部マニフェストを使っていますが、マニフェストを置いたのにsakura.exeがビジュアルスタイルにならない、といった報告が今後出てくるかもしれません。
僕自身、この現象にはちょっと悩まされたので... (^^;

2007/5/9 (水) 22:31:56 ryoji  
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SV1; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.0.04506; .NET CLR 1.1.4322; InfoPath.2)
[4809] Re2: Vista UAC機能対応について
> マニフェストを埋め込む、ちょっと特殊なコンパイル方法も
> HSP のヘビーユーザーによって開発されていたように思いましたが、
> 私の手元には確認環境などがありませんし...


すいません。ソースはどこにあるんでしょう?
(手元にはsakuext.exe, sakuext.txtしかありません)
HSPは知らないので手出しできないかもしれませんが。(^^;;;

sakuextは現行のまま、管理者権限マニフェストを埋め込んだ別exeからsakuextを起動してやる、という手もありそうです。
sakura.exeが使用しているiniファイルをexeフォルダにコピーしてからsakuextを起動。
こうすれば権限継承で動作し、実フォルダ参照、レジストリ更新とも可能なはず。
#MSのUAC関連資料を見たところ、CreateProcessじゃなくてShellExecuteExを使えば、できそうな感じ。

2007/5/10 (木) 00:29:25 すい  
INCM1.23c
[4810] Re3: Vista UAC機能対応について
>すいません。ソースはどこにあるんでしょう?
>(手元にはsakuext.exe, sakuext.txtしかありません)
>HSPは知らないので手出しできないかもしれませんが。(^^;;;


こちらです。

http://groups.yahoo.co.jp/group/sakura-editor/files/Junk/
└> S-EXT003.CAB

やっている処理内容自体は大した事ないので、ソースの内容を見て
他に移植する、とかなら楽じゃないかと思いますが、
HSP でのコンパイル手順方面は面倒かもしれません。(;^o^;) (え゛

2007/5/9 (水) 00:18:41 ryoji  
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SV1; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.0.04506; .NET CLR 1.1.4322; InfoPath.2)
[4803] エディタ本体のUAC対応の必要性
>>data:5905で、「メモ帳や他のエディタでそのファイルを開くと変更が保存されていません。」とありますが、メモ帳は別格としても通常の他エディタでは変更されているように見えるはずなんだけどな???
まぁ、こういうケースでは利用者にそういうもの(OSの仕様)だと理解してもらうので良いと思いますが、サクラエディタ自身の.ini保存場所について考えてみました。

もかさんが紹介してくださったURLの記載内容をざっと読んでみたところ、

・インストーラ/アップデータやシステム設定変更プログラムには管理者権限用のマニフェストを埋め込んでおくこと
・一般ユーザ権限で動作させるような通常のアプリはアプリ自身の設定をProgram Files(CSIDL_PROGRAM_FILES)配下のようなコアフォルダに保存してはいけない
・Virtual Storeは、いつまでもその存在を当てにはできない(旧式アプリでもエラー回避して実行できるようにするための一時的救済措置であって、64bitアプリ用にはVirtual Storeは提供してない)


ってことですねぇ〜。

というわけで、.iniがVirtual Store側に保存されるのは回避したほうが良さそうです。
64bit化や将来OSでVirtual Storeが無くなったら、保存エラーになって意図どおりに動かなくなっちゃいますから。

2007/5/9 (水) 00:22:49 ryoji  
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SV1; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.0.04506; .NET CLR 1.1.4322; InfoPath.2)
[4804] UAC&マルチユーザ対応案
特に急ぐ必要は無いかもしれませんが、
・VistaでのUAC対応
・マルチユーザ対応

の同時実現案です。

Ver5.0未満のOS(Win95/98/Me/NT4.0)では従来どおり、常に.exeと同じフォルダに.iniを保存する。
Ver5.0以降のOSでもCSIDL_PROGRAM_FILES以外(外部記憶媒体etc.)から起動した場合は、.exeと同じフォルダに.iniを保存する。
Ver5.0以降のOSでCSIDL_PROGRAM_FILESから起動した場合のみ以下のように.iniのRead/Writeを機能拡張する。

【.iniの読出し】
(1) ユーザ別設定フォルダ(CSIDL_APPDATA\sakura)に.iniがあればそちらを、無ければ.exeと同じフォルダの.iniを読む。

※CSIDL_APPDATAの位置
2k/XP: C:\Documents and Settings\<username>\Application Data
Vista: C:\Users\<username>\AppData\Roaming

【.iniの保存】
(2) Vistaよりも以前のOSでは読み出したときの.iniを更新する(.iniが無い初期起動時は.exeと同じフォルダに.iniを作成)。
→ユーザが自分専用の.iniを手動でユーザ別設定フォルダに置くとマルチユーザ対応になる
(3) Vista以後のOSでは常にユーザ別設定フォルダに.ini保存する。
→自動的にマルチユーザ対応&Virtual Storeへの.ini保存を回避

【従来仕様から新仕様へのバージョンアップ時動作】
Vista以外の利用者は(1)(2)により、手動でマルチユーザ化を行わない限り従来と何も変わりません。
既にVista移行しているユーザの場合、バージョンアップ時、
・(1)で、.exeと同じフォルダの.iniを読もうとしてVirtual Storeから最新の.iniが読まれる
・(3)で、更新後の.iniがユーザ別設定フォルダに保存される
・以後、ユーザ別設定フォルダの.iniが使われる

ということになります。

その他、マルチユーザ動作する場合(.iniの保存先がユーザ別設定フォルダになる場合)には、次のようにするのが良いかも。
・.iniだけでなく、ユーザ指定アイコン、マクロ等の相対位置の基準もユーザ別設定フォルダにする
・各種設定のimport/export時など、ファイルダイアログを表示する際の初期表示はCSIDL_MYDOCUMENTSにする

(CSIDL_PROGRAM_FILESへの保存を促すようなことは避ける)
あと、ついでに簡易ユーザ切替え対応も。

CSIDL_PROGRAM_FILES配下の.exeフォルダとユーザ別設定フォルダをまとめてひとつのフォルダに放り込めば、持ち歩き用外部記憶媒体の出来上がり(これもツール化すればもっと楽になると思います)。

この案だと、CSIDL_PROGRAM_FILES以外のコアフォルダ(CSIDL_WINDOWSなど)から実行した場合に.iniがVirtual Store側に保存されることについては面倒を見ない、ということにはなりますが...
あと、シングルユーザ/マルチユーザを設定で切り替える、というのもちらっと考えたんですが、その設定自体を保存する場所が無いということに。(^^;

2007/5/9 (水) 00:29:55 ryoji  
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SV1; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.0.04506; .NET CLR 1.1.4322; InfoPath.2)
[4805] 拡張子連動設定のUAC対応
> ・VistaでのUAC対応
> ・マルチユーザ対応
> の同時実現案です。


の案が前提ですが、拡張子連動設定のほうは管理者権限用マニフェストを適用するのに加えて、.iniの場所をエディタ本体から教えてもらうインターフェースを用意するのが良いのでしょうね。
具体的なところまでは考えてませんが、環境変数を使うとか?

2007/5/10 (木) 00:40:01 すい  
INCM1.23c
[4811] RE: 拡張子連動設定のUAC対応
>の案が前提ですが、拡張子連動設定のほうは管理者権限用マニフェストを適用するのに加えて、.iniの場所をエディタ本体から教えてもらうインターフェースを用意するのが良いのでしょうね。
>具体的なところまでは考えてませんが、環境変数を使うとか?


別案
サクラエディタ内部に設定画面を設けて、そこから操作する。

案1.関連付けツールの関連付け処理部をサクラエディタ内部に移植する。

案2.サクラエディタから関連付けツールに対して、関連付け処理を依頼する。
   例えば、サクラエディタに設けた設定画面で「.txt に関連付けしろ」と
   操作されたら、サクラエディタが sakuext.exe に対して
   「.txt に sakura.exe を関連付けしろ」という指示を出して処理させる。

こういう方法なら、そもそも .ini の位置は気にしなくて良くなります。

2007/5/10 (木) 01:54:02 ryoji  
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SV1; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.0.04506; .NET CLR 1.1.4322; InfoPath.2)
[4812] Re2: 拡張子連動設定のUAC対応
▼ すいさん
利便性も考慮するとすいさんの案が良さそうですね。念のため事前にレジストリ変更の確認メッセージも出すようにすれば問題無いかな?
ただ、UAC配下では、
・管理権限exeは起動するたびに実行確認のUACダイアログが出る
・一般権限exeは管理権限には昇格できない

ようなので、案1は採用できそうにないですけど、案2なら。

2007/5/9 (水) 01:13:40 ryoji  
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SV1; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.0.04506; .NET CLR 1.1.4322; InfoPath.2)
[4806] Re:UAC&マルチユーザ対応案
忘れないうちに...
> その他、
ファイル名簡易表示に"%AppData%"を追加。

2007/5/9 (水) 21:08:14 maru  
INCM1.23a
[4808] Re2:UAC&マルチユーザ対応案
>・.iniだけでなく、ユーザ指定アイコン、マクロ等の相対位置の基準もユーザ別設定フォルダにする
キーワードヘルプファイルやアウトラインルールファイルの相対位置も同様なんですよね。
あと、どこのiniファイルで動作しているのか確認する機能が必要かどうか。debugビルド専用の機能で良いのかも。

2007/5/16 (水) 01:02:06 ryoji  
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SV1; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.0.04506; .NET CLR 1.1.4322; InfoPath.2)
[4823] Re3:UAC&マルチユーザ対応案
▼ maruさん
> あと、どこのiniファイルで動作しているのか確認する機能が必要かどうか。debugビルド専用の機能で良いのかも。
よく考えてみるとS_ExpandParameterで取得可能にする必要がありそうですね。
エディタのフルパスを取得しているような既存マクロの中には、そちらに要変更なものもありそうです。
言われてみなければ気がつかない所でした。ありがとうございます。
#パッチ提出に向けてぼちぼち作業中

2007/5/16 (水) 01:46:17 maru  
INCM1.23a
[4824] Re4:UAC&マルチユーザ対応案
>> あと、どこのiniファイルで動作しているのか確認する機能が必要かどうか。debugビルド専用の機能で良いのかも。
>よく考えてみるとS_ExpandParameterで取得可能にする必要がありそうですね。
>エディタのフルパスを取得しているような既存マクロの中には、そちらに要変更なものもありそうです。

そういえばユーザiniがあるとき、デバッグ用のexeもやはりユーザiniを参照することになる?
とすると、通常のexeとデバッグのexeでユーザiniの奪い合いになり、ややこしいですね。どうしたらいいのだろう。

2007/5/16 (水) 21:39:24 ryoji  
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SV1; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.0.04506; .NET CLR 1.1.4322; InfoPath.2)
[4826] Re5:UAC&マルチユーザ対応案
▼ maruさん
> そういえばユーザiniがあるとき、デバッグ用のexeもやはりユーザiniを参照することになる?
> とすると、通常のexeとデバッグのexeでユーザiniの奪い合いになり、ややこしいですね。どうしたらいいのだろう。

この部分はもう先行実装していて、今のところProgram Filesのサブフォルダパスをそのままユーザ設定フォルダに展開するようにしてます。
つまり、
C:\Program Files\sakura\sakura.exe
C:\Program Files\sakura\Release\sakura.exe
C:\Program Files\sakura\Debug\sakura.exe
があったとすると、それぞれが使うiniファイルは、
C:\Users\<user>\AppData\Roaming\sakura\sakura.ini
C:\Users\<user>\AppData\Roaming\sakura\Release\sakura.ini
C:\Users\<user>\AppData\Roaming\sakura\Debug\sakura.ini
のように別々になるようにしています。
こういうので良いかしら?
#こんなところにも、Program Files以外は面倒見ない目論見が現れていたりします。(^^;

2007/5/19 (土) 02:32:06 ryoji  
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SV1; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.0.04506; .NET CLR 1.1.4322; InfoPath.2)
[4828] Re:UAC&マルチユーザ対応案
sakuext.exe側のUAC対策(ベース案は>>dev:4809
および、
sakura.exe側のUAC & マルチユーザ対応
のパッチを作成しました。
→Patches#1721425

2007/5/19 (土) 23:27:56 げんた  
INCM1.23c
[4829] Re2:UAC&マルチユーザ対応案
iniファイルの選択だけ動作確認いたしました.

設定ファイルの名前=実行ファイル名.ini
実行ファイル名を変更すると設定ファイル名も変わる.
(従来からこういう動作だったのですね)

Program Filesに入っていない場合は常に実行ファイルと同じディレクトリで設定ファイルが読み書きされる.

Program Filesに入っている場合には...
[Windows XP]
自分でApplication Data\[Program Filesのインストールディレクトリ名]\[実行ファイル名].ini
を作成すればそれが使われる.それがなければ実行ファイルと同じディレクトリ.(いずれも読み書きとも.)

[Windows Vista]
実行ファイルと同一ディレクトリ(Virtual Store含む)に設定ファイルがあればそれが読み込まれる.
保存は常にユーザ\AppData\Roaming\[Program Filesのインストールディレクトリ名]\[実行ファイル名].ini

-----
で,本題.
キーワードヘルプ等で相対パスの読み出し基準パスがIniファイルベースに変更されていますが,例えば既にVistaへインストールを行ってProgram Files\sakuraにファイルを(管理者権限で)置いている場合,新バージョンを使うと自分でファイルをiniの場所へ移動しないと見えなくなりませんか?

相対パスでファイル(ini以外)を開くときは常に個人ディレクトリ→無ければ実行ファイルの場所と両方チェックするようにすべきではないのかなと思います.

それともう一つ.AppDataは隠しファイルなのでエクスプローラの設定を変えないと見えませんよね.
そこへ各種ファイルを自分でコピーするのは誰でもできるとは言い難い感じがします.
Program Filesへ入れるときはインストーラを使うでしょうから,インストーラで設定ファイルのディレクトリを開くショートカットを作るのも1つの方法かもしれません.

2007/5/20 (日) 22:12:52 ryoji  
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SV1; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.0.04506; .NET CLR 1.1.4322; InfoPath.2)
[4830] Re3:UAC&マルチユーザ対応案
▼ げんたさん
> 相対パスでファイル(ini以外)を開くときは常に個人ディレクトリ→無ければ実行ファイルの場所と両方チェックするようにすべきではないのかなと思います.
両方チェックするようにしてみました。

> それともう一つ.AppDataは隠しファイルなのでエクスプローラの設定を変えないと見えませんよね.
> そこへ各種ファイルを自分でコピーするのは誰でもできるとは言い難い感じがします.
> Program Filesへ入れるときはインストーラを使うでしょうから,インストーラで設定ファイルのディレクトリを開くショートカットを作るのも1つの方法かもしれません.

こちらはあまり良い案が思い浮かびません。
隠しフォルダかどうかには関係なく、相対指定時にexeファイル位置以外が基準になるということ自体ユーザーにはわかりにくいと思います。
というか、自分は最近まで相対指定できることも知らなかったのでフォルダ/ファイルはすべて絶対指定していました。(^^;

#iniのファイル名がexeのファイル名と同じになるのは
#知ってて使ってましたが...
#皆さん、こういうのって、ご存じなのでしょうか?

2007/5/21 (月) 00:26:21 すい  
INCM1.23c
[4831] Re4:UAC&マルチユーザ対応案
相対パスでファイル(ini以外) を指定するというのは、
サクラエディタのセット一式をフロッピーディスクや
USBメモリー等、リムーバブルメディアに入れて持ち運ぶため、
というのがそもそもの存在理由なのであって、、、

# 私は「パソコンによってインストール先ドライブが異なるけど
# 設定はそのままコピーできるようにしたい」という理由で使って
# ますけど。
# 1. パソコンA にて、各種項目を使いやすくなるよう設定
# 2. そのまま↑を他のパソコンB,パソコンC,... にゴッソリ コピーして設定完了。
#   パソコンによって A: とか C: とか H: とか

ですから相対パス指定時は sakura.exe のパス以外を
参照されるようだと困ると思うのですが。

sakura.exe 基準に探してファイルが無い場合、一応、
他も見てみる、というなら許容されるかもしれませんが。

2007/5/21 (月) 01:25:45 ryoji  
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SV1; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.0.04506; .NET CLR 1.1.4322; InfoPath.2)
[4832] Re5:UAC&マルチユーザ対応案
▼ すいさん
> # 私は「パソコンによってインストール先ドライブが異なるけど
> # 設定はそのままコピーできるようにしたい」という理由で使って
> # ますけど。

VistaでProgram Files下に置く場合は、そういう利用方法自体ができなくなるんですよね〜。
Program Files下のファイル(辞書やマクロ)をエディタで編集すると実体はVirtual Store行きなので、そのPC上ではあたかも保存されたように意図通りの動作をするけど、sakuraフォルダをまるごと別PCにコピーしても編集後ファイルはコピーされないです。
#エクスプローラでProgram Files下を扱う場合はVirtual Storeは参照されない
WSHで書かれたマクロファイルあたりだと、これがまた特殊で、ファイルを開く時点で書き込みオープンできなかったりします。

それで、Program Files下以外なら従来と同じ動作になるよう、exeとiniを同一フォルダで扱うように考えているわけでして、
従来感覚でフォルダをひとつだけ丸ごとコピーするのみで移行できるようにしておきたい、ということになると非保護の別フォルダにインストールして使用するしか無いんじゃないか?と思います。

2007/5/21 (月) 15:35:10 ラスティブ  
Mozilla/5.0 (X11; U; SunOS i86pc; en-US; rv:1.7) Gecko/20051027
[4833] Re6:UAC&マルチユーザ対応案
話はそれるかも知れませんけれども、
従来感覚は損なわれるけどエディタ本体とそれに付随する
ユーザー設定ファイルの移動を
円滑に行うための機能を提供できたりは、しませんか?
「サクラダウン」のような専用ツールを用意するとか… ^^;

Program Files には容易に触れられなくなるようですし。

2007/5/22 (火) 00:40:29 maru  
INCM1.23a
[4834] Re7:UAC&マルチユーザ対応案
>「サクラダウン」のような専用ツールを用意するとか… ^^;
あれはオモチャです(^^;;
正直こんなにユーザが増えると思ってなかったので…。

2007/5/22 (火) 01:25:18 ryoji  
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SV1; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.0.04506; .NET CLR 1.1.4322; InfoPath.2)
[4835] Re7:UAC&マルチユーザ対応案
▼ ラスティブさん
> 従来感覚は損なわれるけどエディタ本体とそれに付随する
> ユーザー設定ファイルの移動を
> 円滑に行うための機能を提供できたりは、しませんか?
> 「サクラダウン」のような専用ツールを用意するとか… ^^;

ご意見ありがとうございます。
それも一案ですね〜。

とはいえ、それ以前に本体としてできる限りのことはしておきたいので、そのあたりはしっかり詰めておきたいところです。

2007/5/22 (火) 02:04:20 ryoji  
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SV1; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.0.04506; .NET CLR 1.1.4322; InfoPath.2)
[4836] Re:UAC&マルチユーザ対応案
> 【.iniの読出し】
> (1) ユーザ別設定フォルダ(CSIDL_APPDATA\sakura)に.iniがあればそちらを、無ければ.exeと同じフォルダの.iniを読む。
>
> ※CSIDL_APPDATAの位置
> 2k/XP: C:\Documents and Settings\<username>\Application Data
> Vista: C:\Users\<username>\AppData\Roaming


CSIDL_APPDATAではなくCSIDL_PROFILE\.sakura\としてみたらどうだろう?
C:\Program Files\sakura\
 ↓
2k/XP: C:\Documents and Settings\<username>\.sakura\sakura\
Vista: C:\Users\<username>\.sakura\sakura

VistaだとC:\Users\<username>\が従来のマイドキュメント並の扱いになっていて、ここに入れると結構目立ちます。
マイドキュメント並の扱い、というのは、スタートメニュー、デスクトップ、ファイルダイアログのプレースバーにショートカットがあるという意味です。
(マイドキュメントはC:\Users\<username>\のサブフォルダに格下げされている)
jEditなんかはここに.jeditサブフォルダを作成して使っているようです。
CSIDL_APPDATAのような隠しフォルダ下に置くのとは随分印象が違ってくるような。
マクロや辞書はアクセスしやすい場所に置きたいですからね。

>その他
>>data:5905 にも対処できそうです。
>>dev:4800 のマニフェストをsakura.exe用にちょっといじるだけ(管理権限実行ではなくユーザ権限実行されるように書き換える)。
Virtual Storeは動作が紛らわしく、ユーザーを混乱させるだけなので、保護フォルダ下への保存は素直にエラーになってくれたほうがいい。
というか、Virtual Storeは旧アプリ用に用意されてるだけなんだから、Vista対応アプリではマニフェスト使うのが筋なのでしょうね。
上記マニフェスト適用で、ファイル保存時に次のようなエラーメッセージが出てくれるのを確認しました。

-----------------------
「[Window Title]
名前を付けて保存

[Content]
C:\Program Files\sakura\無題
この場所に保存するアクセス許可がありません。
管理者に連絡してアクセス許可を取得してください。

代わりに [<username>] フォルダに保存しますか?

[はい(Y)] [いいえ(N)]
-----------------------

[はい(Y)] を選ぶと、C:\Users\<username>フォルダ表示に。
いい感じ!

2007/5/23 (水) 00:04:43 げんた  
INCM1.23c
[4839] Re2:UAC&マルチユーザ対応案
>CSIDL_APPDATAではなくCSIDL_PROFILE\.sakura\としてみたらどうだろう?
>VistaだとC:\Users\<username>\が従来のマイドキュメント並の扱いになっていて、ここに入れると結構目立ちます。

いいかもしれませんね.XP以前では別にそれを使うのは必須ではないし,APPDATAでもProfile直下でも大差はないと思いますので.

Vistaに詳しい方へ質問(^^)
* ドットで始める意味は?隠しフォルダになるんですか?
* Windows標準の(例えばダウンロード)フォルダのようにフォルダ名とユーザに見せる名前を変えることってできるんでしょうか?


>上記マニフェスト適用
kwsk..あ,いや,Vista初心者のために具体的に説明していただけるとありがたいです.

>プレースバー
余談ですが,先日PCショップに展示してあるMacを見て,プレースバーがあまりにVistaに似ていたので(というかVistaのバーがあまりにMacに似ていたので)驚きました.

2007/5/23 (水) 01:22:41 ryoji  
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SV1; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.0.04506; .NET CLR 1.1.4322; InfoPath.2)
[4840] Re3:UAC&マルチユーザ対応案
▼ げんたさん
> * ドットで始める意味は?隠しフォルダになるんですか?
通常、システム予約のようなファイル/フォルダにつけるんじゃないでしょうか?
ユーザ自身が決めたのではない、OSや個々のソフトが定めた目的のものにつけられる名称、かな。
隠しフォルダにはならないみたいです。
Windowsではあまり多くは見かけないですね。(UNIX系の文化?)
エクスプローラでドットから始まるファイル名/フォルダ名は作れず、リネームもできないみたいです。
コマンドプロンプトからは mkdir ".sakura" のようにして作れます。

> * Windows標準の(例えばダウンロード)フォルダのようにフォルダ名とユーザに見せる名前を変えることってできるんでしょうか?
これは、知らないです〜。(調べたこともない)

> >上記マニフェスト適用
> kwsk..あ,いや,Vista初心者のために具体的に説明していただけるとありがたいです.

何に関する説明をすればいいのかよくわからないですが...
"requireAdministrator"の部分を"asInvoker"にします。
マニフェストが無い、あるいはマニフェストにtrustInfoセクションが無いアプリは、Program Files配下に設定ファイルを持つ旧式アプリの可能性があり、そこに書き込めないとまったく使い物にならないかもしれない、ということでVirtual Storeを使わされるのだと思います。
もうメンテもされていないようなアプリなら、それでいいんでしょうけど。。。
ちなみに、Vistaではタスクマネージャの[プロセス]タブのリストビューに「仮想化」という列を表示することができます。
どうやら、Virtual Storeが適用されているプロセスはここが「有効」と表示されるようです。

2007/5/23 (水) 06:37:19 げんた  
INCM1.23c
[4841] Re4:UAC&マルチユーザ対応案
>> * ドットで始める意味は?隠しフォルダになるんですか?
>エクスプローラでドットから始まるファイル名/フォルダ名は作れず、リネームもできないみたいです。

あ,なるほど.これは意味があるかも.名前を勝手に変えられると認識されなくなりますからね.

>> * Windows標準の(例えばダウンロード)フォルダのようにフォルダ名とユーザに見せる名前を変えることってできるんでしょうか?
>これは、知らないです〜。(調べたこともない)

「Sakura設定ファイル」とか見せられると.sakuraよりは見栄えがよいかなと思ったのです.
できたとしてもレジストリ設定が必要になりそうな予感はしますね.

>"requireAdministrator"の部分を"asInvoker"にします。
>マニフェストが無い、あるいはマニフェストにtrustInfoセクションが無いアプリは、Program Files配下に設定ファイルを持つ旧式アプリの可能性があり、そこに書き込めないとまったく使い物にならないかもしれない、ということでVirtual Storeを使わされるのだと思います。

なるほど.明示的にユーザ権限で実行される場合はVirtual Store機能は無効になるのですね.

ちなみにこの場合,例えばシステムファイルを編集するつもりで意図的に「管理者で実行」を選んでも,Vistaの場合はProgram Filesには書き込まないようにしてあるから実行権限には関係なくユーザの設定が使われるという理解で良いのでしょうか.
現状ではManifestが無いから管理者として実行するとProgram Filesに書き込めてしまってVirtual Storeのファイルと矛盾する結果になるのかな?

2007/5/23 (水) 22:26:17 ryoji  
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.0.04506; InfoPath.2)
[4844] Re5:UAC&マルチユーザ対応案
▼ げんたさん
> ちなみにこの場合,例えばシステムファイルを編集するつもりで意図的に「管理者で実行」を選んでも,Vistaの場合はProgram Filesには書き込まないようにしてあるから実行権限には関係なくユーザの設定が使われるという理解で良いのでしょうか.
"asInvoker"アプリをユーザが明示的に「管理者で実行」すれば、"requireAdministrator"アプリと同じ動きになります。
UAC的に保護されているだけのファイルであれば実ファイルへの書き込み可能です。
(システムdllなどは別の保護が働くから管理者でも直接は上書きできない)

> 現状ではManifestが無いから管理者として実行するとProgram Filesに書き込めてしまってVirtual Storeのファイルと矛盾する結果になるのかな?
そうです。仮想化されているアプリとされていないアプリとでは見えるものが違ってしまいます。
エクスプローラやメモ帳は仮想化されておらず、それらと見えるものが違うという現状は気持ち悪い(^^;です。
新規保存したはずなのにエクスプローラで見えない、とか。(そういうときは「互換性ファイル」ボタンを押せば実フォルダから仮想フォルダへ移動して見ることはできる)

2007/5/23 (水) 22:40:15 ryoji  
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.0.04506; InfoPath.2)
[4845] Re6:UAC&マルチユーザ対応案
▼ げんたさん
> > 現状ではManifestが無いから管理者として実行するとProgram Filesに書き込めてしまってVirtual Storeのファイルと矛盾する結果になるのかな?
そういえば、現状のインストーラでは最後の画面でエディタ起動できるんですが、このときはインストーラの管理者権限を継承しているので仮想化無しで動作し、UAC保護されている実フォルダへの書き込みができますし、iniファイルも実フォルダに書き込まれます。(^^;

2007/5/31 (木) 02:10:36 げんた  
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; InfoPath.1) Sleipnir/2.5.12
[4856] Re5:UAC&マルチユーザ対応案
> >"requireAdministrator"の部分を"asInvoker"にします。
> >マニフェストが無い、あるいはマニフェストにtrustInfoセクションが無いアプリは、Program Files配下に設定ファイルを持つ旧式アプリの可能性があり、そこに書き込めないとまったく使い物にならないかもしれない、ということでVirtual Storeを使わされるのだと思います。

> なるほど.明示的にユーザ権限で実行される場合はVirtual Store機能は無効になるのですね.

で,ふと気になったことが.

Virtual Storeを使わない
=既にVirtual Storeに入れたファイルは読み出せない
=sakuraをバージョンアップしたら設定が初期化される!

となります?さすがにこれはまずいかと.

2007/5/31 (木) 22:34:01 ryoji  
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SV1; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.0.04506; .NET CLR 1.1.4322; InfoPath.2)
[4857] Re6:UAC&マルチユーザ対応案
▼ げんたさん
> > >"requireAdministrator"の部分を"asInvoker"にします。
> > >マニフェストが無い、あるいはマニフェストにtrustInfoセクションが無いアプリは、Program Files配下に設定ファイルを持つ旧式アプリの可能性があり、そこに書き込めないとまったく使い物にならないかもしれない、ということでVirtual Storeを使わされるのだと思います。
> > なるほど.明示的にユーザ権限で実行される場合はVirtual Store機能は無効になるのですね.

> で,ふと気になったことが.
>
> Virtual Storeを使わない
> =既にVirtual Storeに入れたファイルは読み出せない
> =sakuraをバージョンアップしたら設定が初期化される!
>
> となります?さすがにこれはまずいかと.


OSの違いには自動的に対応するのが良いかと思いましたが、難しそうですね。
UACも当初のONからOFFに切り替えて使っているという場合もあるでしょうし、どれが最新の現用ファイルかはユーザ自身にしかわからないですね。

・Program Filesに置いた場合だけマルチユーザ化の対象にする
・設定を自動移行する
・マニフェストを埋め込みにする

↑は全部やめて、

↓にしようと思います。
・sakura.exeと同じフォルダにある特別なファイルでマルチユーザ設定してもらう(UAC対象のProgram Files下の場合は他フォルダで編集後コピーするとか、管理者指定でエディタ起動して編集するとか)
・上記ファイルの指定に従って、設定ファイルは手動で移動してもらう(現用ファイルの判断は本人任せ)
・Virtual Storeを使わないようにするときはそれ用の外部マニフェストを適用してもらう

デフォルトは従来と何一つ変えず、意図的に変更する場合のみ、すべて手動でやってもらう、と。
面倒といえば面倒ですが、自分に最適な環境の再構築は自分でやってもらうことに。
エディタ本体には、環境変更時にしか利用されない冗長な機能は付けない。(やるとすれば別ツールで)

2007/6/4 (月) 03:27:34 げんた  
INCM1.23c
[4861] インストーラ作ってみました (Re7:UAC&マルチユーザ対応案)
>・Virtual Storeを使わないようにするときはそれ用の外部マニフェストを適用してもらう
Virtual StoreをOFFにすると既にインストールして使っている人がバージョンアップした場合に設定が全て消えたように見えるという問題を考えると無条件でマニフェストの入れ替えを行うわけにはいかず,かといって>>data:5905を考慮するとVirutalStoreは無効であることがが望ましい.

移行ツールをつくるにも,インストーラがAdministratorで動いているとVirtualStoreが見えないという問題があります.Admin権限のままVitualStoreの場所を取得する方法がわかれば移行ツールを実行して対処できるのですが...

とりあえずryojiさんのMultiUser2.patchを使ってマルチユーザ対応インストーラを作ってみました.
http://sakura.qp.land.to/dev/?Installer

Administrator権限が無くてもそれなりにインストールできるようにしてみました.

2007/6/4 (月) 21:51:01 ryoji  
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SV1; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.0.04506; .NET CLR 1.1.4322; InfoPath.2)
[4862] Re:インストーラ作ってみました (Re7:UAC&マルチユーザ対応案)
▼ げんたさん
> >・Virtual Storeを使わないようにするときはそれ用の外部マニフェストを適用してもらう
> Virtual StoreをOFFにすると既にインストールして使っている人がバージョンアップした場合に設定が全て消えたように見えるという問題を考えると無条件でマニフェストの入れ替えを行うわけにはいかず,かといって>>data:5905を考慮するとVirutalStoreは無効であることがが望ましい.

インストール先に既存のsakura.exeがある場合は既存環境を引き継ぐだけで良いのではないでしょうか。

新規セットアップでは
・OSに関係なくVirtual Store OFF用のsakura.exe.manifestを入れる
・マルチユーザ選択画面に合わせたsakura.exe.iniを入れる


上書きセットアップでは
・Virtual Store OFF用のsakura.exe.manifestを別の名前で入れる(サンプル)
・マルチユーザ選択画面は出さずにsakura.exe.iniを別の名前で入れる(サンプル)


既にsakura.exe.iniがあるなら再選択は邪魔なだけだと思います。

2007/6/4 (月) 22:57:06 ryoji  
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SV1; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.0.04506; .NET CLR 1.1.4322; InfoPath.2)
[4863] Re2:インストーラ作ってみました (Re7:UAC&マルチユーザ対応案)
▼ ryojiさん
> 新規セットアップでは
> ・OSに関係なくVirtual Store OFF用のsakura.exe.manifestを入れる

「OSに関係なく」は微妙かしら。Vistaだけにしたほうがいい?
移行前に流布しておきたいところだけど、Vistaにそのまま持っていったら設定が保存されなくなった!他のアプリは問題無いのに...となりそうな。

2007/6/4 (月) 23:12:55 げんた  
INCM1.23c
[4866] Re3:インストーラ作ってみました (Re7:UAC&マルチユーザ対応案)
>移行前に流布しておきたいところだけど、Vistaにそのまま持っていったら設定が保存されなくなった!他のアプリは問題無いのに...となりそうな。
XPからのアップグレードでVistaになるケースを考えると,最初の案のようにProgram Filesの配下だったらマルチユーザモードに切り替わるような機能が無いとうまく行かないのかなぁ.

旧バージョンをインストールしている場合→virtual storeで一見それっぽく動く
Vista対応版をインストールしている場合→急にアクセスできなくなる→マルチユーザ設定に自動的に移行

実にややこしい.

ところで,Windowsファイル保護ってCドライブ直下とかも保護対象(ただしVirutalStore適用外)だったように思いますが,XPからアップグレードした場合はどこまで保護対象になるかご存じですか.下手に本体だけVista対応しているとはまりそう.

2007/6/4 (月) 23:42:20 ryoji  
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SV1; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.0.04506; .NET CLR 1.1.4322; InfoPath.2)
[4867] Re4:インストーラ作ってみました (Re7:UAC&マルチユーザ対応案)
▼ げんたさん
> ところで,Windowsファイル保護ってCドライブ直下とかも保護対象(ただしVirutalStore適用外)だったように思いますが,XPからアップグレードした場合はどこまで保護対象になるかご存じですか.
XPからのアップグレードでも同じみたいです。
Cドライブ直下への保存は仮想化有効アプリ/無効アプリのどっちでも拒否されます。

2007/6/4 (月) 23:05:24 げんた  
INCM1.23c
[4864] Re2:インストーラ作ってみました (Re7:UAC&マルチユーザ対応案)
>既にsakura.exe.iniがあるなら
なるほど.インストール先に既に入っているファイルを確認して処理を分けたほうがいいですね.

2007/6/4 (月) 23:05:24 げんた  
INCM1.23c
[4865] 設定移行ツール案
>インストーラがAdministratorで動いているとVirtualStoreが見えない
VirtualStore無効設定へこんな感じで移行できるかもというシナリオを考えてみました.

sakura.exeにはmanifestを埋め込んでvirtual store無効にする.
manifestを埋め込まない移行ツール(互換モードで動作)を作成する.
マルチユーザかつsakura.iniが無い場合はvirtual storeにあるかもしれないsakura.iniを探すためにその移行ツールを起動.その際,実行ファイルのディレクトリと個人ディレクトリのパスを渡す.
移行ツールでは実行ファイルのディレクトリにあるかもしれないsakura.iniを開いてみる.もしopenに成功したら GetFinalPathNameByHandle()を呼びだして本当のパス名を取得する.
VirtualStoreなら ("VirtualStore"という文字列が含まれていればOK?) sakura.iniと同じディレクトリのファイルを全て個人ディレクトリへ移動(またはコピー)する.本当はsakura.iniの中身の書き換えをしないと辻褄が合わなくなるけどそこまで面倒を見られるかどうか.相対パスを活用すれば固定文字列の埋め込みで何とかなるか?
本体へ戻って,再度個人ディレクトリのsakura.iniをチェック.

2007/6/8 (金) 01:21:30 ryoji  
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SV1; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.0.04506; .NET CLR 1.1.4322; InfoPath.2)
[4868] Re:インストーラ作ってみました (Re7:UAC&マルチユーザ対応案)
▼ げんたさん
> とりあえずryojiさんのMultiUser2.patchを使ってマルチユーザ対応インストーラを作ってみました.
> http://sakura.qp.land.to/dev/?Installer

sakura.exe単体ダウンロードのほうへは設定ファイルのサンプルとその説明ファイルを追加したらいいんじゃないかな〜、と思い、説明ファイルに記載する文章を追加してみました。

2007/5/24 (木) 00:00:29 ryoji  
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SV1; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.0.04506; .NET CLR 1.1.4322; InfoPath.2)
[4846] Re3:UAC&マルチユーザ対応案
▼ げんたさん
> >CSIDL_APPDATAではなくCSIDL_PROFILE\.sakura\としてみたらどうだろう?
> >VistaだとC:\Users\<username>\が従来のマイドキュメント並の扱いになっていて、ここに入れると結構目立ちます。

> いいかもしれませんね.XP以前では別にそれを使うのは必須ではないし,APPDATAでもProfile直下でも大差はないと思いますので.

ただ、MSの推奨はあくまでもCSIDL_APPDATA配下なので、手前勝手に作るのが良いとも言い切れず...
将来的にはCSIDL_APPDATAも可視になって「アプリケーション設定」などという別名で表示されるようになるかも。
推奨には従っておいて、エディタ本体にエディタの設定フォルダを開く機能を設けるほうが無難かもしれないです。

> >プレースバー
> 余談ですが,先日PCショップに展示してあるMacを見て,プレースバーがあまりにVistaに似ていたので(というかVistaのバーがあまりにMacに似ていたので)驚きました.

人気の(?)Aero 3DフリップがMacのExpose(えくすぽぜ)の物真似という話も。

2007/5/26 (土) 20:42:49 ryoji  
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SV1; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.0.04506; .NET CLR 1.1.4322; InfoPath.2)
[4850] Re4:UAC&マルチユーザ対応案
> > >CSIDL_APPDATAではなくCSIDL_PROFILE\.sakura\としてみたらどうだろう?
> > >VistaだとC:\Users\<username>\が従来のマイドキュメント並の扱いになっていて、ここに入れると結構目立ちます。
> > いいかもしれませんね.XP以前では別にそれを使うのは必須ではないし,APPDATAでもProfile直下でも大差はないと思いますので.

> ただ、MSの推奨はあくまでもCSIDL_APPDATA配下なので、手前勝手に作るのが良いとも言い切れず...

CSIDL_APPDATA配下のまま、設定画面の[OK]ボタンの左側の空き部分に[設定フォルダ]ボタンを追加してみました(→Patches)。
ボタンを押すとメニューが表示されます。
メニュー項目: [開く] 、[インポート/エクスポートの起点リセット]

INCM/CMT
Cyclamen v3.81
[ut:0.040][st:0.010]