NOEMBLEM/エンブレムが設定されていません。

メールの詳細(トピック表示)

AppData\Local\以下のフォルダ削除について

投稿者:もんちきTwinTurboさん  2016/11/06 14:50  MLNo.3232   [メール表示]

初めまして。
wixに付いて色々試行錯誤しながら、このメーリングリストに辿り着きました。

以前にもほぼ同じ内容のメールがありましたが、
結果がどうなったのか書かれていないようですので、
質問させて下さい。

アンインストール時、

任意のドライブ\Users\user_name\AppData\Local\application_name

のファイルとフォルダを削除したいと考えています。
このフォルダは、インストーラは作成せず、
初回起動後、アプリによって作成されます。

現在、wxsファイルには以下の様に記述しており、コンパイル時にエラーは出ませんが、
アンインストールしても、フォルダもファイルも削除されない状態です。

<Directory Id="TARGETDIR" Name="SourceDir">

<Directory Id="ProgramFilesFolder" Name="PFiles">
<Directory Id="LocalAppData" Name="LocalAppData">
<Component Id="LocalAppDataDir" Guid="*-*-*-*-*">
<CreateFolder />
<RemoveFolder Id="LocalAppDataDir" On="uninstall" />
<RegistryValue Root="HKCU" Key="Software\[Manufacturer]\[ProductName]" Type="string" Value="%USERPROFILE%[LocalAppData]\[ProductName]" />
</Component>
</Directory>

削除したいフォルダは
<Directory Id="TARGETDIR" Name="SourceDir">の下層にないので、
<RegistryValue…の行を追加し、削除したいフォルダの位置を示そうとしているのですが、
レジストリファイルにはAppDataに関するキーは存在しません。
<RegistryValue…の行を削除してもコンパイルは通りますが、
どちらにしてもフォルダは削除されません。

相対パスで示せないので
<Directory Id="TARGETDIR" Name="SourceDir">と横並びで記述してみると
'LocalAppData'は適切なルートディレクトリではないとエラーが出てしまいます。

カレントユーザ\AppData\Local以下のフォルダは
どの様にしたら削除できるのでしょうか?
ご教授下さい。

過去のログに見落とし等ありましたら申し訳ありません。
よろしくお願いします。


Gg[ubN}[N


  • MLNo.3233   とっちゃんさん  (0) 2016/11/06 19:19  [メール表示する]
    とっちゃんです。

    インストーラには、大きく2種類あり、
    該当マシンの全ユーザーに影響を与えるインストール(PerMachineInstall)と
    インストーラの実行ユーザーのみに影響を与えるインストール(PerUserInstall)の
    2種類のインストーラがあります。

    ユーザー固有のファイルやフォルダ、あるいはレジストリをインストーラで操作する場合
    そのインストーラは、PerUsersInstall が行われている必要があります。

    どちらのインストール形式で作られているかは、Package タグの InstallScope で確認ができると思います。


    --------------------------------------------------
    From: もんちきTwinTurbo <topendialog1@…>
    Reply-To: msi@…
    To: msi@…
    Subject: [msi:3232] AppData\Local\以下のフォルダ削除について

    >初めまして。
    >wixに付いて色々試行錯誤しながら、このメーリングリストに辿り着きました。
    >
    >以前にもほぼ同じ内容のメールがありましたが、
    >結果がどうなったのか書かれていないようですので、
    >質問させて下さい。
    >
    >アンインストール時、
    >
    >任意のドライブ\Users\user_name\AppData\Local\application_name
    >
    >のファイルとフォルダを削除したいと考えています。
    >このフォルダは、インストーラは作成せず、
    >初回起動後、アプリによって作成されます。
    >
    >現在、wxsファイルには以下の様に記述しており、コンパイル時にエラーは出ませんが、
    >アンインストールしても、フォルダもファイルも削除されない状態です。
    >
    ><Directory Id="TARGETDIR" Name="SourceDir">
    >…
    ><Directory Id="ProgramFilesFolder" Name="PFiles">
    ><Directory Id="LocalAppData" Name="LocalAppData">
    ><Component Id="LocalAppDataDir" Guid="*-*-*-*-*">
    ><CreateFolder />
    ><RemoveFolder Id="LocalAppDataDir" On="uninstall" />
    ><RegistryValue Root="HKCU" Key="Software\[Manufacturer]\[ProductName]" Type="string" Value="%USERPROFILE%[LocalAppData]\[ProductName]" />
    ></Component>
    ></Directory>
    >
    >削除したいフォルダは
    ><Directory Id="TARGETDIR" Name="SourceDir">の下層にないので、
    ><RegistryValue…の行を追加し、削除したいフォルダの位置を示そうとしているのですが、
    >レジストリファイルにはAppDataに関するキーは存在しません。
    ><RegistryValue…の行を削除してもコンパイルは通りますが、
    >どちらにしてもフォルダは削除されません。
    >
    >相対パスで示せないので
    ><Directory Id="TARGETDIR" Name="SourceDir">と横並びで記述してみると
    >''LocalAppData''は適切なルートディレクトリではないとエラーが出てしまいます。
    >
    >カレントユーザ\AppData\Local以下のフォルダは
    >どの様にしたら削除できるのでしょうか?
    >ご教授下さい。
    >
    >過去のログに見落とし等ありましたら申し訳ありません。
    >よろしくお願いします。
    >
    >
    >MLホームページ: http://www.freeml.com/msi
    >
    >----------------------------------------------------------------------
    >◇◆オリックス銀行カードローン◆◇
    >限度額300円まで所得証明書不要
    > 「おまとめ・借り換えОK!」
    > 提携ATМご利用手数料0円
    >http://ad.freeml.com/cgi-bin/sa.cgi?id=pymVF
    >------------------------------------------------------[freeml byGMO]--

    // とっちゃん(高萩 俊行)
    // http://blogs.wankuma.com/tocchann/default.aspx
    // Microsoft MVP for Visual Studio and Development Technologies
    // WindowsInstallerの話題は http://www.freeml.com/msi まで

  • MLNo.3234   もんちきTwinTurboさん  (0) 2016/11/07 12:53  [メール表示する]
    とっちゃん様

    ご回答、ありがとうございます。

    >ユーザー固有のファイルやフォルダ、あるいはレジストリを
    >インストーラで操作する場合そのインストーラは、PerUsersInstall
    >が行われている必要があります。

    なるほど、そういう事だったのですね。

    現在packageタグにはInstallScopeの定義が無く、自動的にPerMachineInstall
    がされていた様です。定義を追加しPerUserに設定したところ、ProgramFilesフォルダへインストールする権限がないと言われました。(PerMachineInstallの際表示された、権限昇格のダイアログも表示されませんでした。)

    以前はインストーラとアンインストーラも自作し同梱して配布していたので、それに比べると随分楽ちんですが、PerMachineでインストールする場合は、データの保存策に工夫が必要ですね。

    お忙しい中ご回答下さり、ありがとうございました。

  • MLNo.3235   とっちゃんさん  (0) 2016/11/07 13:12  [メール表示する]
    とっちゃんです。

    >がされていた様です。定義を追加しPerUserに設定したところ、ProgramFilesフォルダへインストールする権限がないと言われました。(PerMachineInstallの際表示された、権限昇格のダイアログも表示されませんでした。)

    一応、PerMachineでインストールしておき、なおかつ個々のユーザーごとの
    情報も後でアンインストールしたいという場合は
    複数インスタンスという仕組みでインストーラを多重化してインストールさせることで
    対応する方法があります(個人的には、かなりハードルの高い実装と感じているのでお勧めはしません)。

    ・Installing Multiple Instances of Products and Patches
    https://msdn.microsoft.com/en-us/library/aa369523(v=vs.85).aspx


    XPや、それ以前のOSも対応となるとこれだとかなり厳しいですが
    一応の選択肢として挙げておきます(私自身も使ったことはありません)。

    あとは、カスタムアクション(CustomActions)で、コードを記述する方法もあることはあります。
    こちらもあまりお勧めはできない手段が。。。

    個人的には、アプリケーションの新バージョンの初回起動時などに
    旧バージョン情報を削除する段取りを入れるか
    専用のユーザー固有情報削除ツールなどを提供する
    というのが一番無難かな?と思います。




    --------------------------------------------------
    From: もんちきTwinTurbo <topendialog1@…>
    Reply-To: msi@…
    To: msi@…
    Subject: [msi:3234] Re:AppData\Local\以下のフォルダ削除について

    >とっちゃん様
    >
    >ご回答、ありがとうございます。
    >
    >>ユーザー固有のファイルやフォルダ、あるいはレジストリを
    >>インストーラで操作する場合そのインストーラは、PerUsersInstall
    >>が行われている必要があります。
    >
    >なるほど、そういう事だったのですね。
    >
    >現在packageタグにはInstallScopeの定義が無く、自動的にPerMachineInstall
    >がされていた様です。定義を追加しPerUserに設定したところ、ProgramFilesフォルダへインストールする権限がないと言われました。(PerMachineInstallの際表示された、権限昇格のダイアログも表示されませんでした。)
    >
    >以前はインストーラとアンインストーラも自作し同梱して配布していたので、それに比べると随分楽ちんですが、PerMachineでインストールする場合は、データの保存策に工夫が必要ですね。
    >
    >お忙しい中ご回答下さり、ありがとうございました。
    >
    >
    >MLホームページ: http://www.freeml.com/msi
    >
    >----------------------------------------------------------------------
    >今までダイエットに失敗してきたあなた
    >必見です!!やせる事に特化した専門店
    >ミスパリダイエットセンター☆彡☆彡
    >今なら、5,000円で体験実施中♪
    >http://ad.freeml.com/cgi-bin/sa.cgi?id=pyywD
    >------------------------------------------------------[freeml byGMO]--

    // とっちゃん(高萩 俊行)
    // http://blogs.wankuma.com/tocchann/default.aspx
    // Microsoft MVP for Visual Studio and Development Technologies
    // WindowsInstallerの話題は http://www.freeml.com/msi まで

  • MLNo.3236   もんちきTwinTurboさん  (0) 2016/11/07 17:09  [メール表示する]
    とっちゃん様、有益な情報提供ありがとうございます。

    確かに、インスタンスを複数化するのもカスタムアクションもハードル高いですね…

    >専用のユーザー固有情報削除ツールなどを提供する

    そのアドバイスをいただいて、アプリにユーザーの固有情報を削除する機能を包含しました。ありがとうございます。

    取りあえずwixの勉強をかねて、perUserインストールに変更し、アプリと同じフォルダ内に\ユーザ名 のフォルダを作成し、各ユーザ毎のデータを分割して保存するという変更を試しました。「これならアプリ削除時、ユーザデータも消える。」と思ったのですが、アプリだけ削除されて、ユーザのデータは残ってしまいました(´iωi`)

    以下の様な記述になっています。
    <Directory Id="TARGETDIR" Name="SourceDir">
    <Directory Id="LocalAppData" Name="PFiles">
    (これだとC:\PFile以下にインストールされました)
    <Directory Id="subfolder" Name="myapp">
    <Component Id="MyApp.EXE" DiskId="1" Guid="*-*-*-*-*">
    </Component>
    <Component Id="StartMenuShortcuts" Guid="*-*-*-*-*">
    <RemoveFile Id="Remove.LocalAppData" Name="*.*" On="uninstall"/>
    <RemoveFolder Id="ProgramMenuDir" On="uninstall" />
    <RegistryValue Root="HKCU" Key="Software\[Manufacturer]\[ProductName]" Type="string" Value="" />
    </Component>
    </Directory>


    コンパイルではエラーが出ないのですが、何が間違っているのでしょうか…
    お忙しいところ恐縮ですが、ご教授いただけると幸いです。

    よろしくお願いします。

  • MLNo.3237   とっちゃんさん  (0) 2016/11/07 17:30  [メール表示する]
    とっちゃんです。

    AppData, LocalAppData などは、システムディレクトリとして定義されています。

    具体的な定義一覧は下記リファレンスを見てもらうとして。。。

    ・Property Reference#System Folder Properties
    https://msdn.microsoft.com/en-us/library/aa370905(v=vs.85).aspx#system_folder_properties


    LocalAppData は、LocalAppDataFolder という名前で定義されているので、

    <Directory Id="TARGETDIR" Name="SourceDir">
    <Directory Id="LocalAppDataFolder" Name="LocalAppData"><!--ここが違う-->
    <!--いろいろ-->
    </Directgory>
    </Directgory>

    という感じで定義します(Nameの内容はインストーラの都合で適当に定義します)。

    ちなみに、AppData は、AppDataFolder です。
    そのほかにもいろいろあるのでアプリの実情に合わせて定義をチェックしてみてください。

    --------------------------------------------------
    From: もんちきTwinTurbo <topendialog1@…>
    Reply-To: msi@…
    To: msi@…
    Subject: [msi:3236] Re:AppData\Local\以下のフォルダ削除について

    >とっちゃん様、有益な情報提供ありがとうございます。
    >
    >確かに、インスタンスを複数化するのもカスタムアクションもハードル高いですね…
    >
    >>専用のユーザー固有情報削除ツールなどを提供する
    >
    >そのアドバイスをいただいて、アプリにユーザーの固有情報を削除する機能を包含しました。ありがとうございます。
    >
    >取りあえずwixの勉強をかねて、perUserインストールに変更し、アプリと同じフォルダ内に\ユーザ名 のフォルダを作成し、各ユーザ毎のデータを分割して保存するという変更を試しました。「これならアプリ削除時、ユーザデータも消える。」と思ったのですが、アプリだけ削除されて、ユーザのデータは残ってしまいました(´iωi`)
    >
    >以下の様な記述になっています。
    ><Directory Id="TARGETDIR" Name="SourceDir">
    ><Directory Id="LocalAppData" Name="PFiles">
    >(これだとC:\PFile以下にインストールされました)
    ><Directory Id="subfolder" Name="myapp">
    ><Component Id="MyApp.EXE" DiskId="1" Guid="*-*-*-*-*">
    ></Component>
    ><Component Id="StartMenuShortcuts" Guid="*-*-*-*-*">
    ><RemoveFile Id="Remove.LocalAppData" Name="*.*" On="uninstall"/>
    ><RemoveFolder Id="ProgramMenuDir" On="uninstall" />
    ><RegistryValue Root="HKCU" Key="Software\[Manufacturer]\[ProductName]" Type="string" Value="" />
    ></Component>
    ></Directory>
    >…
    >
    >コンパイルではエラーが出ないのですが、何が間違っているのでしょうか…
    >お忙しいところ恐縮ですが、ご教授いただけると幸いです。
    >
    >よろしくお願いします。
    >
    >
    >MLホームページ: http://www.freeml.com/msi
    >
    >----------------------------------------------------------------------
    >◇◆オリックス銀行カードローン◆◇
    >限度額300円まで所得証明書不要
    > 「おまとめ・借り換えОK!」
    > 提携ATМご利用手数料0円
    >http://ad.freeml.com/cgi-bin/sa.cgi?id=py14b
    >------------------------------------------------------[freeml byGMO]--

    // とっちゃん(高萩 俊行)
    // http://blogs.wankuma.com/tocchann/default.aspx
    // Microsoft MVP for Visual Studio and Development Technologies
    // WindowsInstallerの話題は http://www.freeml.com/msi まで

  • MLNo.3238   もんちきTwinTurboさん  (0) 2016/11/09 23:44  [メール表示する]
    とっちゃん様、情報をありがとうございます。
    また、返信が遅くなり、申し訳ありません。

    現在は、カスタムアクションでアンインストール時だけ、削除用のスクリプトを呼び出してみたり、まだ試行錯誤中です。

    ただ、カスタムアクションで検索して気付いたのですが、StackOverFllow等にも、まったく同じ事を聞いている人がいました。残念なのは、どの書き込みも、最終的にどこへ落ち着いたのかが書かれていない点ですが。

    また進捗があったら書き込みます。
    何時もありがとうございます。


  • MLNo.3239   とっちゃんさん  (0) 2016/11/10 11:12  [メール表示する]
    とっちゃんです。

    >現在は、カスタムアクションでアンインストール時だけ、削除用のスクリプトを呼び出してみたり、まだ試行錯誤中です。

    CA(Custom Actions:カスタムアクション)で実行する場合、Execute 属性を何にしているかで
    どのアカウントで動くかや実行条件が変わります。

    ユーザーローカルな情報にアクセスするので、原則的には、Execute=''immediate'' で実行するのが
    一番だと思います。
    とはいえ、この場合はアンインストールを実行したユーザーアカウントの情報しか消しません。
    当たり前ですが管理者権限が有効な状態であっても、ユーザー固有情報へはアクセスできないので
    消したくても消せないというのが現実ですが。


    >ただ、カスタムアクションで検索して気付いたのですが、StackOverFllow等にも、まったく同じ事を聞いている人がいました。残念なのは、どの書き込みも、最終的にどこへ落ち着いたのかが書かれていない点ですが。

    結果だけで言えば、やってみたけど半端だったので、やっぱり何もしない!
    だと思います。そのため立ち消え的に消えてるんだと思います。

    具体的なところは省きますが(単純じゃないのでw)
    バージョンアップへの配慮(メジャー・マイナー)、
    バージョン間で同居するのかどうか、
    同一バージョンをアンインストールしてインストールした場合
    などなど、インストーラでどうにかすればいいを
    超えたところでいろいろ考慮しないといけない部分があります。


    バージョンアップがある(あった)なら、この先3バージョン以上は
    見越して対応しないと、将来破たんするレベルで難しい問題です。


    --------------------------------------------------
    From: もんちきTwinTurbo <topendialog1@…>
    Reply-To: msi@…
    To: msi@…
    Subject: [msi:3238] Re:AppData\Local\以下のフォルダ削除について

    >とっちゃん様、情報をありがとうございます。
    >また、返信が遅くなり、申し訳ありません。
    >
    >現在は、カスタムアクションでアンインストール時だけ、削除用のスクリプトを呼び出してみたり、まだ試行錯誤中です。
    >
    >ただ、カスタムアクションで検索して気付いたのですが、StackOverFllow等にも、まったく同じ事を聞いている人がいました。残念なのは、どの書き込みも、最終的にどこへ落ち着いたのかが書かれていない点ですが。
    >
    >また進捗があったら書き込みます。
    >何時もありがとうございます。
    >
    >
    >
    >MLホームページ: http://www.freeml.com/msi
    >
    >----------------------------------------------------------------------
    >今までダイエットに失敗してきたあなた
    >必見です!!やせる事に特化した専門店
    >ミスパリダイエットセンター☆彡☆彡
    >今なら、5,000円で体験実施中♪
    >http://ad.freeml.com/cgi-bin/sa.cgi?id=pyXFx
    >------------------------------------------------------[freeml byGMO]--

    // とっちゃん(高萩 俊行)
    // http://blogs.wankuma.com/tocchann/default.aspx
    // Microsoft MVP for Visual Studio and Development Technologies
    // WindowsInstallerの話題は http://www.freeml.com/msi まで


メールへの返信はMLのメンバーしかできません。

更新順メールリスト