FastCopy 掲示板


fastcopy.iniが%APPDATA%\FastCopyに保存されない : izumi(10/8/4 12:56)
Re:fastcopy.iniが%APPDATA%\FastCopyに保存されない : izumi(10/8/5 12:59)
Re[2]:fastcopy.iniが%APPDATA%\FastCopyに保存されない : izumi(10/8/7 19:06)
Re[3]:fastcopy.iniが%APPDATA%\FastCopyに保存されない : しろうず(10/8/22 15:30)
Re[4]:fastcopy.iniが%APPDATA%\FastCopyに保存されない : izumi(10/8/22 22:07)
[解決済み]Re:fastcopy.iniが%APPDATA%\FastCopyに保存されない : izumi(12/6/18 07:21)


返事を書く|リスト
1243 Root [1244] [1463]
fastcopy.iniが%APPDATA%\FastCopyに保存されない
izumi(10/8/4 12:56)

お世話になっております。
FastCopy(2.00)からfastcopy.iniの保存場所が変更されましたが、まだUAC仮想化の影響を受けているケースがあるようです。
まだ対象コードは読んでいないのですが、とりあえず発生状況をお伝えします。

OSはWindows7rtm_x86(6.1.7600)で、UACはデフォルトのまま、アカウントはAdministratorsに属しています。FastCopyは2.01です。
不具合が発生するパターンを3つ挙げます。

<手順a>通常権限での起動
a1. FastCopy.exeを%ProgramFiles%配下に配置
a2. fastcopy.iniが存在しないことを確認
    FastCopy.exeの配置場所のチェック
    %APPDATA%\FastCopyフォルダの削除
    %LOCALAPPDATA%\VirtualStoreフォルダ配下のチェック
a3. FastCopy.exeを通常権限で起動し、すぐに終了
    %APPDATA%\FastCopyフォルダが生成される
    %LOCALAPPDATA%\VirtualStoreフォルダ配下にfastcopy.iniが生成される(※)
a4. 再度FastCopy.exeを通常権限で起動
    a3で生成されたfastcopy.iniが%APPDATA%\FastCopyフォルダにコピーされ、VirtualStoreフォルダのショートカットが作成される
    a3で生成されたfastcopy.iniがfastcopy.ini.obsoleteにリネームされる
    %LOCALAPPDATA%\VirtualStoreフォルダ配下にfastcopy.iniが生成される(※)
a5. [設定]メニューの[一般設定]を開き、何も設定せず[OK]ボタンをクリック
    %LOCALAPPDATA%\VirtualStoreフォルダ配下のfastcopy.iniが更新される(※)
    %APPDATA%\FastCopyフォルダのfastcopy.iniは更新されない(※)

a3でfastcopy.iniがVirtualStoreフォルダに生成されますが、これは私が期待している動作ではありません。
a4では、fastcopy.iniが再度新規に生成されています。a3で生成されたfastcopy.iniは使われないことになります。
a5では、%APPDATA%\FastCopyフォルダのfastcopy.iniを更新せず、VirtualStoreフォルダのものを更新しています。これも期待する動作ではありません。

---
<手順b>管理者権限での起動
b1. FastCopy.exeを%ProgramFiles%配下に配置
b2. fastcopy.iniが存在しないことを確認
    FastCopy.exeの配置場所のチェック
    %APPDATA%\FastCopyフォルダの削除
    %LOCALAPPDATA%\VirtualStoreフォルダ配下のチェック
b3. FastCopy.exeを管理者権限で起動し、すぐに終了
    %APPDATA%\FastCopyフォルダが生成される
    FastCopy.exeの配置場所にfastcopy.iniが生成される
b4. 再度FastCopy.exeを管理者権限で起動
    b3で生成されたfastcopy.iniが%APPDATA%\FastCopyフォルダにコピーされる(※)
    b3で生成されたfastcopy.iniがfastcopy.ini.obsoleteにリネームされる(※)
    FastCopy.exeの配置場所にfastcopy.iniが生成される(※)
b5. [設定]メニューの[一般設定]を開き、何も設定せず[OK]ボタンをクリック
    FastCopy.exeの配置場所のfastcopy.iniが更新される
    %APPDATA%\FastCopyフォルダのfastcopy.iniは更新されない(※)

b4には、a4と同じ「再度新規に生成」の問題があります。また、fastcopy.iniを%APPDATA%\FastCopyフォルダにコピーしているのに
FastCopy.exeの配置場所にも配置(新規に生成)する、という動作になっています。
b5では、%APPDATA%\FastCopyフォルダのfastcopy.iniが放置されたままになっています。

---
<手順c>管理者権限と通常権限での起動
c1. FastCopy.exeを%ProgramFiles%配下に配置
c2. fastcopy.iniが存在しないことを確認
    FastCopy.exeの配置場所のチェック
    %APPDATA%\FastCopyフォルダの削除
    %LOCALAPPDATA%\VirtualStoreフォルダ配下のチェック
c3. FastCopy.exeを管理者権限で起動し、すぐに終了
    %APPDATA%\FastCopyフォルダが生成される
    FastCopy.exeの配置場所にfastcopy.iniが生成される
c4. FastCopy.exeを通常権限で起動
    c3で生成されたfastcopy.iniが%APPDATA%\FastCopyフォルダにコピーされる
c5. [設定]メニューの[一般設定]を開き、何も設定せず[OK]ボタンをクリック
    %LOCALAPPDATA%\VirtualStoreフォルダ配下にfastcopy.iniが生成される(※)

管理者権限で起動してシェル拡張を登録し、その後は通常権限で使用する、という一般的に使われるパターンでしょう。
c5でfastcopy.iniがVirtualStoreフォルダに生成されますが、これは私が期待している動作ではありません。

---
確認しておきたいのですが、しろうずさんはfastcopy.iniの保存場所についてどのように設計していますでしょうか。
変更履歴には以下のようにありますが、詳細については不明確な部分があります。

> UAC有効な環境で \Program Files 配下にインストールした場合、fastcopy.ini やログファイルを
> \Users\(USER)\roming\FastCopy 配下に保存するように変更。

上記引用部は、管理者権限で実行されている場合も当てはまりますか?
私は、管理者権限で実行されていたとしても、必ず%APPDATA%\FastCopyフォルダに配置することを期待しています。
これは、設定ファイルが複数個所にあると、ユーザが混乱する可能性があるためです。
例えば、どちらの設定を読み込むか、どちらの履歴をプルダウンに表示するか、などです。

また、fastcopy.iniの移行についてはどのようなポリシーになっていますか?
%ProgramFiles%配下に配置されたFastCopy.exeと同じフォルダに存在するケースや、VirtualStore配下に存在するケース、
両者に存在するケースと、さらに、すでに%APPDATA%\FastCopyフォルダに存在するケースもあります。
これらをどのように新環境に移行するようになっているでしょうか。
本来はコードを読んで読み取るべきなのですが、先のfh2の件もありますので、概要を教えていただけると助かります。

お手数をおかけしますが、調査等よろしくお願いいたします。


返事を書く|リスト
1244 [1243] [1245]
Re:fastcopy.iniが%APPDATA%\FastCopyに保存されない
izumi(10/8/5 12:59)

お世話になっております。
FastCopy(2.01)の対象コードを読ませていただきました。

fastcopy.iniがVirtualStoreフォルダ配下に生成される不具合は、以下のコードに原因があるようです。

FastCopy(2.01):src\cfg.cpp(202)
>   MakePath(ini_path, toA(execDirV), FASTCOPY_INI);

「execDirV」を「userDirV」に変更することでVirtualStoreフォルダに生成されなくなりました。

> 私は、管理者権限で実行されていたとしても、必ず%APPDATA%\FastCopyフォルダに配置することを期待しています。

上記のように変更したもので試験したのですが、管理者権限であっても%APPDATA%\FastCopyフォルダに保存されるようになりました。
ただ、ユーザアカウントにunicodeのみで表現可能な文字が使われた場合にどのように振る舞うかは、少し気になるところです。

%SystemRoot%に配置した場合も考慮されていましたので、fastcopy.iniの保存場所については私の期待通りになりました。

---
上記のLMを使い、新環境への移行動作について調べてみました。

・通常権限で起動
    起動前                        | 起動後
    %ProgramFiles%   VirtualStore   %APPDATA%    | %APPDATA%
  ===============================================================================================================
    なし        なし       なし      | 新規生成
   ----------------------------------------------------------------------------------
    あり        なし       なし      | %ProgramFiles%からコピー,%ProgramFiles%はリネームなし
    なし        あり       なし      | VirtualStoreからコピー,VirtualStoreはリネーム
    あり        あり       なし      | VirtualStoreからコピー,VirtualStoreはリネーム
   ----------------------------------------------------------------------------------
    あり        なし       あり      | 更新なし,%ProgramFiles%はリネームなし
    なし        あり       あり      | 更新なし,VirtualStoreはリネームなし
    あり        あり       あり      | 更新なし,%ProgramFiles%/VirtualStoreはリネームなし

・管理者権限で起動
    起動前                        | 起動後
    %ProgramFiles%   VirtualStore   %APPDATA%    | %APPDATA%
  ===============================================================================================================
    なし        なし       なし      | 新規生成
   ----------------------------------------------------------------------------------
    あり        なし       なし      | %ProgramFiles%からコピー,%ProgramFiles%はリネーム
    なし        あり       なし      | VirtualStoreからコピー,VirtualStoreはリネーム
    あり        あり       なし      | VirtualStoreからコピー,%ProgramFiles%/VirtualStoreはリネーム
   ----------------------------------------------------------------------------------
    あり        なし       あり      | 更新なし,%ProgramFiles%はリネームなし
    なし        あり       あり      | 更新なし,VirtualStoreはリネームなし
    あり        あり       あり      | 更新なし,%ProgramFiles%/VirtualStoreはリネームなし

fastcopy.iniの保存場所が%APPDATA%に固定されるようになり、旧環境の引き継ぎ処理の本来の姿が見えてきました。
すっきりとしていて、自然な方法であると思います。
ただ、起動前から%APPDATA%とこれ以外にfastcopy.iniが存在する場合、参照しないfastcopy.iniをリネームしておいても良いのではないかと感じました。
これは、その設定ファイルが使われていないことをユーザに明示するためです。特に、%ProgramFiles%はLMと同じフォルダに保存されているので、
ユーザが混乱する可能性もあるでしょう。管理者権限で起動されたときはリネームのチャンスであると思います。
(通常権限で起動された時は昇格して削除する、という方法もありますが。)

いろいろお願いしていたのに、ご回答いただく前に投稿してしまい、申し訳ありません。
移行動作については、上記の表が設計通りであるか調べていただけると幸いです。


返事を書く|リスト
1245 [1244] [1255]
Re[2]:fastcopy.iniが%APPDATA%\FastCopyに保存されない
izumi(10/8/7 19:06)

お世話になっております。お忙しいようですね。

本件対処のため、コードが変更されると思います。
表題とは無関係なのですが、新しいスレッドを作るほどのことではないので、こちらに追記させていただきます。

・szの初期化漏れ
VC++2010でビルドするといくつか警告されるのですが、その中でもTMainDlg::MoveCenter()に含まれているszの初期化漏れについて、
デバッグモードで起動した際に例外が発生してしまいます。できましたら修正をお願いします。

> src\mainwin.cpp(255): warning C4701: 初期化されていない可能性のあるローカル変数 'sz' が使用されます

・改行コード
これも些細なことなのですが、fastcopy.cppをVC++2010のエディタなどで開くと、「行の終わりが一貫していない」と警告されます。
できましたら、CR+LFの形に統一していただけると助かります。
なお、2.01の他のファイルについては問題ないようです。

いろいろとお手数をおかけしていますが、よろしくお願いいたします。

---
私事で申し訳ないのですが、ALTStreamの件での反省から、調査などによりわかったことはその都度こちらに書いてしまっています。
思い出す、という作業が考えていた以上に大変なことであるとわかったためです。
ですから、回答を待たず、こちらで分かったことはすべて書いてしまい、後はお任せする、という考えに変えてしまいました。
お任せする、というのは、(免責事項に明記はされていませんが)基本的に保守の責務は負わないものと理解しているからです。
しろうずさんのお時間があるときに調査や検討などを行っていただくためにも、私が調べた材料はお渡ししておきます、という意味です。
コードを公開していただいていますので、影響のあるユーザの方が見れば、自ら対処することも可能でしょう。

ただ、fastcopy.iniの件は正直ショックでした。公開からかなり期間が経っていますが、他の方からの報告はありませんでしたね。
他の方が期待していない機能の実装をお願いしてしまったのだ、とわかりました。反省材料は尽きません。


返事を書く|リスト
1255 [1245] [1259]
Re[3]:fastcopy.iniが%APPDATA%\FastCopyに保存されない
しろうず(10/8/22 15:30)

ご報告ありがとうございます。
肝心な部分が変更されていなかったようですね。

次のバージョンから、UAC有効無効にかかわらず、Program Files 等の (UAC有効時に)File Virtualization対象として列挙されているフォルダを使う場合は、AppData 配下を利用する形にします。
(ただ、非特権ユーザによる(別特権アカウントでの)特権昇格時のユーザフォルダの特定という厄介な話があるのですが…)

> ただ、fastcopy.iniの件は正直ショックでした。公開からかなり期間が経っていますが、他の方からの報告はありませんでしたね。
> 他の方が期待していない機能の実装をお願いしてしまったのだ、とわかりました。反省材料は尽きません。

私自身は、基本的には自分自身にとって便利なソフトウェアを作っていて、他人が要望したという理由だけで導入することはありませんので、お気になさらず。
私が機能追加/変更する場合、
・以前から、いずれは入れようと構想していた(この件はこちら)
・総合的に勘案して、妥当な進化の方向であるとみなした
といった理由が必ずあります。
(そういう次第もあって、他の方から(特定の視点で)「こうであるべきだ」というスタンスの言い方をされることは、あまり好みませんが)


返事を書く|リスト
1259 [1255] なし
Re[4]:fastcopy.iniが%APPDATA%\FastCopyに保存されない
izumi(10/8/22 22:07)

> (そういう次第もあって、他の方から(特定の視点で)「こうであるべきだ」というスタンスの言い方をされることは、あまり好みませんが)

これは別スレッドの私の書き込みも含まれているものと思います。謝罪します。すみませんでした。
言い訳してしまうと、陰で「ここが気に入らない」などと言うよりも、公式の掲示板に書いてしまった方がすっきりしていいな、と思ったためです。また、幸いにも公式の見解をいただきました。これも公式掲示板に投稿する利点でしょう。
さらに、これらの動作が開発者であるしろうずさんの設計であると明確になりました。特に「排他はユーザ側が意識すること」はユーザに周知するには良い機会だったと思います。

---
> 次のバージョンから、UAC有効無効にかかわらず、Program Files 等の (UAC有効時に)File Virtualization対象として列挙されているフォルダを使う場合は、AppData 配下を利用する形にします。
> (ただ、非特権ユーザによる(別特権アカウントでの)特権昇格時のユーザフォルダの特定という厄介な話があるのですが…)

実行環境によっては手順が複雑なようですが、よろしくお願いします。


返事を書く|リスト
1463 [1243] なし
[解決済み]Re:fastcopy.iniが%APPDATA%\FastCopyに保存されない
izumi(12/6/18 07:21)

お世話になっております。
古いスレッドを上げてしまうことに抵抗もあったのですが、2.10のリリースに合わせて現状報告をさせていただくことにしました。

記事番号1243において示しました<手順a><手順b><手順c>の3パターンについて、私の期待通りに動作することを確認いたしました。
また、このスレッド配下に投稿しました記事番号1245の2項目についても修正を確認いたしました。
・TMainDlg::MoveCenter内のszの初期化漏れ
・fastcopy.cppの改行コード

対処していただき、ありがとうございました。


[ FastCopy のページ / 利用方法 / 一覧表示 / 最新記事 / 新規投稿 / 管理用 ]

掲示板管理者 email : FlasH BBS Pro v1.41 [Shigeto Nakazawa]