2015年3月17日火曜日

VB ClickOnce インストール時のファイル構成

一応、備忘録的に、残して置きます。
ClickOnce のアプリのファイル構成について、インストール時とアンインストール時の比較です。
特に、アンインストールで、綺麗に、全て無くなっているのかと思いましたが、一部が残っています。
投稿では、全てのファイル構成を、cmd.exe の TREE コマンドで見てみます。


ご存知の様に、ClickOnce では、通常のアプリとは異なり、独自のファイル保管場所が利用されます。
ユーザープロファイルの既定の場所に、ユーザー個別に、構成されます。

インストールは、Web ( or Intranet ) 上から、もしくは、光学メディア から 行われます。
発行で、デスクトップにアイコンを作成にチェックが入っていれば、そこから、アプリが起動します。
アンインストールや以前のバージョンに戻す作業は、コントロールパネル の プログラムと機能 を用いて行われます。


さて、冒頭に記した インストール時のファイル構成 と アンインストール時のファイル構成 を 以下に。

ここでは、アプリの中から、独自のフォルダを設けて、そこに データ を置く構成です。
また、SQL Server Compact のデータベース ファイル も 使っていますが、 標準的な発行方法に沿っています。

インストール時のファイル構成
C:¥Users¥UserName>tree /F C:¥Users¥UserName¥AppData¥Local¥Apps¥2.0
フォルダー パスの一覧:  ボリューム OS
ボリューム シリアル番号は 00000123 123456789 です
C:¥USERS¥UserName¥APPDATA¥LOCAL¥APPS¥2.0
├─AB3CDEFG.9YZ
│  └─LM5N6OPQ.1PL
│      ├─xxxx...exe_a66b7788cd123456_0000.0009_none_0abc1234d567e8fg
│      │      xxxxxApp.exe.config
│      │      xxxx.ico
│      │      xxxxDB.sdf
│      │
│      ├─xxxx..tion_a66b7788cd123456_0000.0009_6hi78j9q43210r5s
│      │      xxxxxApp.cdf-ms
│      │      xxxxxApp.exe
│      │      xxxxxApp.exe.cdf-ms
│      │      xxxxxApp.exe.config
│      │      xxxxxApp.exe.manifest
│      │      xxxxxApp.manifest
│      │      xxxx.ico
│      │
│      └─manifests
│              xxxx...exe_a66b7788cd123456_0000.0009_none_0abc1234d567e8fg.cdf-ms
│              xxxx...exe_a66b7788cd123456_0000.0009_none_0abc1234d567e8fg.manifest
│              xxxx..tion_a66b7788cd123456_0000.0009_none_45678a1a9bcde0f1.cdf-ms
│              xxxx..tion_a66b7788cd123456_0000.0009_none_45678a1a9bcde0f1.manifest

└─Data
    ├─1VWXYZAB.CDE
    │  └─G56HG78F.DEC
    └─9ABAB0Z9.S2M
        └─D5KLMN55.X09
            └─xxxx..tion_a66b7788cd123456_0000.0009_6hi78j9q43210r5s
                └─Data
                    │  xxxxDB.sdf
                    │
                    └─Subs
                            xxxxxInnerData0001.jpg.

アンインストール時のファイル構成
C:¥Users¥UserName>tree /F C:¥Users¥UserName¥AppData¥Local¥Apps¥2.0
フォルダー パスの一覧:  ボリューム OS
ボリューム シリアル番号は 00000123 123456789 です
C:¥USERS¥UserName¥APPDATA¥LOCAL¥APPS¥2.0
├─AB3CDEFG.9YZ
│  └─LM5N6OPQ.1PL
│      └─manifests
└─Data
    ├─1VWXYZAB.CDE
    │  └─G56HG78F.DEC
    └─9ABAB0Z9.S2M
        └─D5KLMN55.X09


尚、アプリの中で、既定のデータフォルダにサブを設ける為に、以下のコードを実行しています。 VB 。
                     抜粋ですので、単独では、機能しません。  考え方を示すに止めます。
                     サブの有無を確認し、CD-ROM に用意されたフォルダからデータ転送します。
                     通常は、インストール時のデータ転送を想定しています。.
このサブフォルダには多量不特定の画像ファイルがあり、ClickOnce のコンテンツ扱いすると間違えそうなので ... 。
実際には、個々の画像は、データベース内に記述されたファイル名から呼び出されます。
数が少ない設定ファイルの類であれば、 こんな事はせず、 通常の、データファイルとして扱い、配置する のが 正解だと思います ... 。
Public Class xxxxApp

   Const CommonDataDir As String = Application.UserAppDataPath
   Const HomeDir As String = CommonDataDir + "\Subs"
   Const InstDir As String = "Subs"                 'Add DriveLetter(CD-ROM) on Top Position
   Const AppInstLabel As String = "AppName_Inst"

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
   ' Main
   ' ...

   ' Subs Directory Check
   If Not IO.Directory.Exists(HomeDir) Then
      If IO.Directory.Exists(GetInstDriveLetter() + InstDir) Then
         AddSubDir()
      End If
   End If

End Sub

Private Sub AddSubDir()
   IO.Directory.CreateDirectory(HomeDir)
   ' Copy Files
   ' ...
End Sub

Private Function GetInstDriveLetter() As String
   Dim value As String = ""
   Dim drvInf As IO.DriveInfo
   For Each drvInf In IO.DriveInfo.GetDrives
       If drvInf.IsReady Then
          If drvInf.VolumeLabel = AppInstLabel Then
             value = drvInf.Name
             Exit For
          End If
       End If
   Next
   Return value
End Function

' ...
End Class

ご参考になれば ... 。



[2015/03/17] \ 表記を ¥ に変更(TREE コマンド部分のみ)

0 件のコメント:

コメントを投稿