質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

.NET Framework

.NET Framework は、Microsoft Windowsのオペレーティングシステムのために開発されたソフトウェア開発環境/実行環境です。多くのプログラミング言語をサポートしています。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

Q&A

解決済

1回答

36732閲覧

新規インストール時は想定通りのルートを通るが、バージョンアップインストールだ と、ルートが変わってしまう?

kamiyui_bidan

総合スコア47

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

.NET Framework

.NET Framework は、Microsoft Windowsのオペレーティングシステムのために開発されたソフトウェア開発環境/実行環境です。多くのプログラミング言語をサポートしています。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

0グッド

0クリップ

投稿2020/08/27 19:32

編集2020/08/27 20:05

###実現したい事
既にインストール済みの自作アプリ(.msi)のバージョンアップをする際、既存ファイル(.ps1)がタスクスケジューラから実行中だと更新されないので、インストール前後のファイル更新日時を比較し、古いままなら失敗とみなし、アプリバージョンやコンテンツファイルを元に戻したい(バージョンアップさせない)。

###問題
新規インストールの場合、下記★1のルートを通り、インストール前の状態に戻ってくれるが、既存からのバージョンアップの場合、下記エラールートを通らず、インストールが成功してしまう(NewFile.txtが作成されない事で確認)

###実際のインストールで使うコマンド
msiexec /passive /i AAtamesiInst.msi

C#

1public override void Install(System.Collections.IDictionary 2stateSaver) { 3 string filePath = @"C:\Program Files\存在しないファイル.ps1"; 4 5 base.Install(stateSaver);//インストール実行 6 7 //実際はInstall()実行前後でps1ファイルの更新日時を比較しようと 8 //しているが、分かりやすくファイルの存在チェックで代替 9 10 if (File.Exists(filePath)) { 11 } else { 12    //ルート★1 13 string Lpath = @"C:\Program Files\AAtamesiInstDEV\NewFile.txt"; 14 // FileInfoのインスタンスを生成する 15 FileInfo fileInfo = new FileInfo(Lpath); 16 17 // ファイルを作成する 18 FileStream fileStream = fileInfo.Create(); 19 20 throw new InstallException(); //インストール例外 21 } 22}

###補足情報(FW/ツールのバージョンなど)
上記のソースをビルドしたexeをカスタム動作のInstallから呼んでいます。
Windows10、.NET4.6

###少し気になっている点
更新されなかった1ファイルはログイントリガーのタスクスケジュールから実行され、
終了まで数分かかるが、Intuneによるバージョンアップとログインは関係ないと予想

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y_waiwai

2020/08/27 21:47

ルートというのが意味不明です。 エラールートを通らない、ってのはなにを見てそう判断したんでしょうか
dodox86

2020/08/27 23:29

y_waiwaiさんも指摘されていますが、少々説明不足のようです。「ルート」とは、単にそのコードの箇所を通っているかいないか(ルート=経路)の意味で使っていますか。また、カスタム動作のInstallとは、Installerクラスを利用した、Windows Installerのカスタムアクションと言う意味でしょうか。 https://docs.microsoft.com/ja-jp/dotnet/api/system.configuration.install.installer.install?view=netframework-4.6 そのインストーラーは、Visual Studio では、どういったプロジェクトの形態ですか。
Zuishin

2020/08/28 01:44

前の質問を放置して続きを質問しているために意味不明になっています。カスタムアクションを使うことで新規インストールが成功したなら前の質問を解決済みにしてください。
YT0014

2020/08/28 02:44

ファイル更新日時の取得、インストール前後での比較など、できる限りのコードを追加してください。現状では、丸投げの状態だと思えます。
guest

回答1

0

自己解決

解決方法:アプリに付随する既存ファイルを手でいじったら、バージョンアップ前に元に戻しておく。(アプリのバージョンアップ方法で「明示的なアンインストール」をしない場合)

【詳細】
この質問の背景が「バージョンインストール(因みにIntune経由)で、アプリの付随ファイル(テキストファイル)が更新できない事がある」だった。
原因がタスクスケジューラからの実行で時間がかかっていた、と思っていたが、そうではなく「別の担当者が動確をする為、既存ファイルを手でいじっていた」事と「バージョンアップの仕方」によるものだった。

msiのバージョンアップ方法として、「①アンインストール⇒インストール」と
「②既存アプリを明示的にアンインストールせずにインストール」の2つの方法があるが、前者だと既存ファイルを手でいじっていても、アンインストールで既存ファイルが削除されるが、後者だと手でいじったファイルだけ、残ったまま、アプリがバージョンアップされてしまう。

投稿2021/08/21 10:28

編集2021/08/21 10:34
kamiyui_bidan

総合スコア47

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問