C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[4]: Setup.exe 実行時に指定したフォルダを取得


(過去ログ 178 を表示中)

[トピック内 5 記事 (1 - 5 表示)]  << 0 >>

■102369 / inTopicNo.1)  Setup.exe 実行時に指定したフォルダを取得
  
□投稿者/ 虎一 (1回)-(2023/09/11(Mon) 19:09:31)

分類:[.NET 全般] 

VisiaulStudio2022(VB.Net)で開発しております。

プロジェクトから作成したモジュールを Setup.exe、またはmsiより、インストールするように
仕込んでいるのですが画面上から「フォルダパス」を指定出来ると思います。

画面上でユーザーがインストール先を変更した場合、このフォルダパスを取得したいと思っているのですが
可能でしょうか。

もし可能であればやり方をご教示いただけないでしょうか。
宜しくお願い致します。
引用返信 編集キー/
■102370 / inTopicNo.2)  Re[1]: Setup.exe 実行時に指定したフォルダを取得
□投稿者/ とっちゃん (788回)-(2023/09/11(Mon) 19:55:26)
No102369 (虎一 さん) に返信
> VisiaulStudio2022(VB.Net)で開発しております。
>
> プロジェクトから作成したモジュールを Setup.exe、またはmsiより、インストールするように
> 仕込んでいるのですが画面上から「フォルダパス」を指定出来ると思います。
>
> 画面上でユーザーがインストール先を変更した場合、このフォルダパスを取得したいと思っているのですが
> 可能でしょうか。
>
> もし可能であればやり方をご教示いただけないでしょうか。
> 宜しくお願い致します。

インストールされた後であれば、インストールしたアプリ自身は
自分の実行場所で判断できるので
AppDomain.CurrentDomain.BaseDirectory
プロパティで取得すればよいと思います。

それとも、インストーラ実行中あるいはインストール後に
インストールしたアプリとは別のプログラムで
そのパスを取得したいのでしょうか?

インストーラの中で確認したい場合はそのプログラムがどんな条件で実行されているかで
取得方法が変わります。

インストール後に確認したいという場合は、MsiGetProductInfo APIを使うことになると思います。

引用返信 編集キー/
■102371 / inTopicNo.3)  Re[2]: Setup.exe 実行時に指定したフォルダを取得
□投稿者/ 虎一 (3回)-(2023/09/11(Mon) 20:37:04)
2023/09/11(Mon) 20:55:30 編集(投稿者)
2023/09/11(Mon) 20:54:51 編集(投稿者)

とっちゃん様、ご返事ありがとうございます。

> インストール後に確認したいという場合は、MsiGetProductInfo APIを使うことになると思います。

やりたいことなのですが、実はSetUp.exe を実行して所定のフォルダに dllを格納します。
その後に、バッチファイルが流れてレジストリ登録をしております。

Setup.exeがインストールフォルダを変更出来てしまうので、後続のバッチ処理が
パスを固定で実行しておりまして・・・

Setup.exe が流れた後に、そのフォルダパスをバッチの第一引数に指定して起動したいと思ってます。

現在、Setup.exeは以下のようなコードでプロセス起動で実行しています。

        Try

            Dim strPrograminst As String = AppDomain.CurrentDomain.BaseDirectory
            strPrograminst += "Setup.exe"

            Dim pp As System.Diagnostics.Process = System.Diagnostics.Process.Start(strPrograminst)

            '管理者として実行
            pp.StartInfo.Verb = "RunAs"

            pp.WaitForExit()
            Return True
        Catch ex As Exception
            Return False
        End Try

もしご存知でしたら、MsiGetProductInfoの使用方法もご教授いただけないでしょうか。

引用返信 編集キー/
■102372 / inTopicNo.4)  Re[3]: Setup.exe 実行時に指定したフォルダを取得
□投稿者/ とっちゃん (789回)-(2023/09/11(Mon) 21:01:52)
No102371 (虎一 さん) に返信
> とっちゃん様、ご返事ありがとうございます。
>
>>インストール後に確認したいという場合は、MsiGetProductInfo APIを使うことになると思います。
>
> やりたいことなのですが、実はSetUp.exe を実行して所定のフォルダに dllを格納します。
> その後に、バッチファイルが流れてレジストリ登録をしております。
>
> Setup.exeがインストールフォルダを変更出来てしまうので、後続のバッチ処理が
> パスを固定で実行しておりまして・・・
>
> Setup.exe が流れた後に、そのフォルダパスをバッチの第一引数に指定して起動したいと思ってます。
>
Setup.exe を実行したランチャープログラム側でSetup.exeとは「別に」
バッチファイルを実行しているということですか?

全体像が今一つよくわからないですが、バッチファイルもインストーラの中で実行という形ではないのですね。

一応そういう用途向けのに、VSIであれば、Installerクラスというものがあります。
https://learn.microsoft.com/ja-jp/dotnet/api/system.configuration.install.installer?WT.mc_id=DT-MVP-32182


MsiGetProductInfo についても詳細を張り付けておきます。
API リファレンスはこちら
https://learn.microsoft.com/ja-jp/windows/win32/api/msi/nf-msi-msigetproductinfow?WT.mc_id=DT-MVP-32182

VBから呼び出す場合は、P/Invoke を使って呼び出すことになります。
Declare文と、短いですが呼び出しサンプルコードがあるのでこちらを貼っておきます。

http://pinvoke.net/default.aspx/msi.MsiGetProductInfo


product(サンプルでGUIDのところ)は、MSIのProductCode をしてします。
property の部分は msi.h に定義されていますが、"InstallLocation" を指定します。


引用返信 編集キー/
■102394 / inTopicNo.5)  Re[4]: Setup.exe 実行時に指定したフォルダを取得
□投稿者/ 虎一 (4回)-(2023/09/17(Sun) 23:10:28)
とっちゃん様、ご返事ありがとうございます。

ご連絡ありがとうございます。

いただいた情報を元に、作業を進めることになりました。

開発は別の人に依頼することになり、来月以降で対応となりました。

ご連絡が遅くなり大変申し訳ございません。

解決済みで更新させていただきます。
ありがとうございました。

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -