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

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

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

Re[15]: 実行中のプロセス取得について [1]


(過去ログ 121 を表示中)

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

■72424 / inTopicNo.21)  Re[13]: 実行中のプロセス取得について
  
□投稿者/ とっちゃん (229回)-(2014/06/09(Mon) 11:58:14)
とっちゃん さんの Web サイト
No72419 (nobb さん) に返信

>>これらは、InstallShield を使っている場合原則何一つ考慮しなくていい部分です。
> たしかに、作成されたMSI(アップデート用ではないもの)をOrcaで覗いてみたらFilesInUseに関するものが色々ありました。
> (それがどう作用しているかまでは把握していません)
>
言われたので、チェックしてみた!
ある!。。。しらなかったー。。。
が一般的な感覚だと思います。

多分。。。w


>
> 一応私が「一朝一夕では...」と判断した理由ですが、
> ・まず、FilesInUseというものがどういう方法で動き、どうやって表示され、どういう処理が可能か分からない(それは考えなくてもいいのかな・・・?)
> ・ISでそれが動く為に必要な何か(設定?)があるのか

どういう方法で動いているか?や、どうやって表示リストをピックアップしているか?という部分は MsiProcessMessage という
APIを使った、UIとCA(CustomActions)との連携部分に5割くらいのことが書かれています。
ISでそれが動くために必要な何かという部分もこの5割に含まれています。
ちなみに、残りの5割は、Windows でプログラムが動いている仕組みとか、起動中のプログラムで参照しているファイルのチェック方法とか
そういうWindowsInstaller のAPIセットの範疇ではフォローできない部分の話なので、この部分に記載がないというだけです。

実際は、膨大な(世界最大級のAPIリファレンス)のあちらこちらに分散してますし、そもそもなんでプログラムが動いているか?は
いまじゃ学校で習うことの一つ(どこぞの島国の話ではない部分ですけどね)なので、いわゆる前提知識に入っていたりしますが。。。


> ・(信じていない訳ではないですが)本当にUpgradeCodeや、ComponentId等々を気にせずとも作れるものなのか(を自分で確認していない)
ComponentId や UpgradeCode(この識別子でできるであろうことに期待しすぎてる部分があると感じます)などの
各種識別子については、また別の部分に説明がある(これらもきちんと乗っていますが、あっちに一つこっちに一つなのでいろいろ大変ではある)
のでそれらを見てください。というところかな。
ComponentId とはなにか?どういう情報を管理しているのか?
UpgradeCode は?その他識別子(いろいろあるので全部割愛w)は?
という部分、WIndowsInsatllerSDKにきちんと書かれています(このAPIセットの中では非常に重要な識別子なので)。


とはいえ、まずは実際に使えるのか(自分が要求されている目的を達成できる動きになるのか?)を確認するためにも
新規プロジェクトを1つ作成して、その中に更新するファイルを入れてビルド&インストールしてみるのがいいと思います。

このとき、ComponentId やUpgradeCodeといった、各種識別子は一切すり合わせる必要はありません。
本当に新規に作成し、インストール先を設定し(ここだけ、更新したいファイルのインストール先になるようにしておくことをお勧め)
機能やコンポーネントを追加して、ビルド&実行してみるだけです。

テストなので、完全なものである必要はないので、1つだけ更新する形でいいと思います。



> ・アップグレードを作った経験がほぼなく、その辺りの知識が乏しすぎる
> (・乏しいが故の不安)
知らないが故の不安を払拭する方法は、ただ一つ、知る(学ぶ、経験する)だけです。
さすがにこればっかりは。。。ですねw



> ・さらっと、ちょびっと調べてみる(ぐぐってみる)と英語情報のみ見つかり、なおかつInstallScript or FilesInUseを抑止したい旨の物が多い
>
InstallScript の話題は今回についてはただの雑音です。出てきてしまうのはある意味仕方ない部分はあると思います。
それだけ情報量が多いということでもあるので。

あとは、英語しかないのは日本語で書いてる人がそもそもいないから。
「話題にならない=使われていない」
ではありません。
「話題にならない=なにか考えて対策する必要がない」
です。

んー。。。でも、FilesInUse で検索すれば、日本語もいくつか出るんですけどね。。。
目的に合うやつがあるかどうかは別として。。。



> そして、それらをオレオレで実装してしまう方法(起動してますよ!終了させてくださいね!で終了という処理の予定)と天秤にかけた結果です。
> いずれの理由にしても「調べろ!そして学べ!!」と言われたら何も言い返す事ができません。
>
自前実装か、WindowsInstaller に任せるか?については、最終的にアップデータでなにをやるか?によるので何とも。。。
ただし、自前実装ならキャンセル処理には必ずロールバックの実装が必要になるという点は外せないポイントになります。
リブートして更新という必要がある場合もありますが、いずれにしてもかなり厳しいことに変わりはありません。
それ以外に、このスレの最初の話題でもある、実行中のプロセスのリストアップという問題もあります。


> 表題の疑問に関しては不要な事だと思い書いていませんでしたが、EXEのアップデート以外にも必要な処理があり、
> それはIS(Windows Installerエンジン)では出来ない部分なので、1本のEXEで完了させたいという目的もありました。
> #おそらく、きちんとアップデーターを作れば、それをEXE側から起動させればいいだけだとは思いますが。。。

アップデート以外の部分については、表裏一体なところはあるような気もしますけど、問題の切り分け的には
別のものなので、ここでは考慮不要でもいいと思いますよ。
msiやmspでアップデータを用意するとなったら、その時改めて考えればいいと思います。

引用返信 編集キー/
■72442 / inTopicNo.22)  Re[14]: 実行中のプロセス取得について
□投稿者/ nobb (40回)-(2014/06/09(Mon) 18:27:27)
No72424 (とっちゃん さん) に返信

> どういう方法で動いているか?や、どうやって表示リストをピックアップしているか?という部分は MsiProcessMessage という
> APIを使った、UIとCA(CustomActions)との連携部分に5割くらいのことが書かれています。
> ISでそれが動くために必要な何かという部分もこの5割に含まれています。
> ちなみに、残りの5割は、Windows でプログラムが動いている仕組みとか、起動中のプログラムで参照しているファイルのチェック方法とか
> そういうWindowsInstaller のAPIセットの範疇ではフォローできない部分の話なので、この部分に記載がないというだけです。
MsiProcessMessageについて調べてみると、これをC++側から呼び、FilesInUseダイアログを表示させているサンプルがいくつか見つかりました。
要するに、ISで作成すると、特に意識せずともその辺り(プログラムでの実装部分)をカバーしてくれると踏みましたが、
おおよそでも合っていますか?


> いまじゃ学校で習うことの一つ(どこぞの島国の話ではない部分ですけどね)なので、いわゆる前提知識に入っていたりしますが。。。
正直な話、そいうった学校出てないんですよね。。ですので、必死に色々読み込んでいる訳ですが、
前提知識としてとか言われてしまうと心が折れそうに・・・w(とっちゃんさんに対して悪意ある意味ではないので。自分の知識不足を呪ってる意味です)


> ComponentId や UpgradeCode(この識別子でできるであろうことに期待しすぎてる部分があると感じます)などの
UpgradeCodeがアップグレードを行う上での大前提だと思っていたので、そのように感じられて間違いないと思います。


> という部分、WIndowsInsatllerSDKにきちんと書かれています(このAPIセットの中では非常に重要な識別子なので)。
とっちゃんさんのブログから探しきました。
http://msdn.microsoft.com/en-us/library/cc185688(VS.85).aspx
SDKについてはこれでいいですかね??とりあえずFilesInUseあたり(?)を読んでみたいと思います。


> とはいえ、まずは実際に使えるのか(自分が要求されている目的を達成できる動きになるのか?)を確認するためにも
> 新規プロジェクトを1つ作成して、その中に更新するファイルを入れてビルド&インストールしてみるのがいいと思います。
>
> このとき、ComponentId やUpgradeCodeといった、各種識別子は一切すり合わせる必要はありません。
> 本当に新規に作成し、インストール先を設定し(ここだけ、更新したいファイルのインストール先になるようにしておくことをお勧め)
> 機能やコンポーネントを追加して、ビルド&実行してみるだけです。
>
> テストなので、完全なものである必要はないので、1つだけ更新する形でいいと思います。
ひとまず、このようにやってみたいと思います。
ただ、更新したいファイルのインストール先が取得できないケースが間違いなく存在します。
その場合でも大丈夫でしょうか?

>>・アップグレードを作った経験がほぼなく、その辺りの知識が乏しすぎる
>>(・乏しいが故の不安)
> 知らないが故の不安を払拭する方法は、ただ一つ、知る(学ぶ、経験する)だけです。
> さすがにこればっかりは。。。ですねw
で、ですよねー・・・


> 「話題にならない=なにか考えて対策する必要がない」
おー。なるほど。この発想はできませんでした。


> 自前実装か、WindowsInstaller に任せるか?については、最終的にアップデータでなにをやるか?によるので何とも。。。
> ただし、自前実装ならキャンセル処理には必ずロールバックの実装が必要になるという点は外せないポイントになります。
> リブートして更新という必要がある場合もありますが、いずれにしてもかなり厳しいことに変わりはありません。
> それ以外に、このスレの最初の話題でもある、実行中のプロセスのリストアップという問題もあります。
今作っている物の目的が、現状の更新作業のリプレースなので、ロールバックについてはさほど高度な事はする予定がありません。
(ファイルに.bakを付加し、更新する。失敗したら戻す。これがいいかどうかは置いておいて。。。)
リストアップだけならどうにかこうにかできました。後はそれを見やすくするには・・・と思っていましたが、
どうにもアップグレードを作るのが得策な気がしてきました。


> アップデート以外の部分については、表裏一体なところはあるような気もしますけど、問題の切り分け的には
> 別のものなので、ここでは考慮不要でもいいと思いますよ。
> msiやmspでアップデータを用意するとなったら、その時改めて考えればいいと思います。
そのようにしたいと思います。


> んー。。。でも、FilesInUse で検索すれば、日本語もいくつか出るんですけどね。。。
> 目的に合うやつがあるかどうかは別として。。。
すっかり頭から抜け落ちていましたが、とっちゃんさんのブログなんていう日本語記事があるのを思い出しました!!
ですので、後で舐めまわすように拝見させていただきます!(←ちょっとふざけ過ぎましたw)

新たな疑問というか、確認したい事が生まれたのですが、MsiProcessMessageってプログラム側から呼び出す事もできるようなのですが、
ISでインストーラーを作り、配布したものに対してその関数を使うっていうのはナンセンスですよね?
引用返信 編集キー/
■72446 / inTopicNo.23)  Re[15]: 実行中のプロセス取得について
□投稿者/ とっちゃん (230回)-(2014/06/09(Mon) 19:54:28)
とっちゃん さんの Web サイト
No72442 (nobb さん) に返信
> MsiProcessMessageについて調べてみると、これをC++側から呼び、FilesInUseダイアログを表示させているサンプルがいくつか見つかりました。
> 要するに、ISで作成すると、特に意識せずともその辺り(プログラムでの実装部分)をカバーしてくれると踏みましたが、
> おおよそでも合っていますか?
>
はい。ファイル更新処理やそれに関するもろもろの部分は、インストール処理としては根幹にかかわる部分です。
なので、Windows Installer がいい感じに対処してくれますし、そうじゃないといろいろな面で使えないと判断されてしまいますw
そのためのシステム(仕組み)ですからね。

>
>>いまじゃ学校で習うことの一つ(どこぞの島国の話ではない部分ですけどね)なので、いわゆる前提知識に入っていたりしますが。。。
> 正直な話、そいうった学校出てないんですよね。。ですので、必死に色々読み込んでいる訳ですが、
> 前提知識としてとか言われてしまうと心が折れそうに・・・w(とっちゃんさんに対して悪意ある意味ではないので。自分の知識不足を呪ってる意味です)
>
アメリカだとコンピュータサイエンスできちんとした学の場があります。なので、SDKとかの一部にはそういう知識がある人が
前提になってる部分があるんです(アカデミックな要件としてではなく)。
インストーラはそのテクノロジの波及範囲が膨大なため(システム全域に及ぶ)、全部をSDKに含めてなんてということができません。
なので、結果として基本部分とか、理論的な部分とかはほかに譲る(紙面節約という意味でも)ことになるんですよ。

だって、OSってなに?なんてインストーラを作る上ではそれを知っていることは重要ですが、インストーラを使うだけなら
重要な知識じゃないですもん。

なので、知らないことを卑下する必要はありません。単にWindowsInstallerの要求スペックが高いだけですから。


>
>>ComponentId や UpgradeCode(この識別子でできるであろうことに期待しすぎてる部分があると感じます)などの
> UpgradeCodeがアップグレードを行う上での大前提だと思っていたので、そのように感じられて間違いないと思います。
>
>
>>という部分、WIndowsInsatllerSDKにきちんと書かれています(このAPIセットの中では非常に重要な識別子なので)。
> とっちゃんさんのブログから探しきました。
> http://msdn.microsoft.com/en-us/library/cc185688(VS.85).aspx
> SDKについてはこれでいいですかね??とりあえずFilesInUseあたり(?)を読んでみたいと思います。
>
はい。SDKのURLはそこがトップです。

>>テストなので、完全なものである必要はないので、1つだけ更新する形でいいと思います。
> ひとまず、このようにやってみたいと思います。
> ただ、更新したいファイルのインストール先が取得できないケースが間違いなく存在します。
> その場合でも大丈夫でしょうか?
>
更新したいファイルのインストール先は、作成時にはわからないだけで
実行時ならわかりますよね?実行環境ならプログラム的に調べる手段がありますよね?

そうであれば、とりあえずテストアプリについては、考慮しなくてもいいと思います。
実働部分はやると決めてから、改めて調査すれば事足ります。


>>自前実装か、WindowsInstaller に任せるか?については、最終的にアップデータでなにをやるか?によるので何とも。。。
>>ただし、自前実装ならキャンセル処理には必ずロールバックの実装が必要になるという点は外せないポイントになります。
>>リブートして更新という必要がある場合もありますが、いずれにしてもかなり厳しいことに変わりはありません。
>>それ以外に、このスレの最初の話題でもある、実行中のプロセスのリストアップという問題もあります。
> 今作っている物の目的が、現状の更新作業のリプレースなので、ロールバックについてはさほど高度な事はする予定がありません。
> (ファイルに.bakを付加し、更新する。失敗したら戻す。これがいいかどうかは置いておいて。。。)
> リストアップだけならどうにかこうにかできました。後はそれを見やすくするには・・・と思っていましたが、
> どうにもアップグレードを作るのが得策な気がしてきました。
>
どっちがいいかは案件のボリュームやその他もろもろの影響も考慮しなければならないので
今の場面ではどちらを選択するのがいいかは判断しかねるところはあります。

実際のところ、かつての自分が通ってきた道でもあるので
それぞれの選択肢がどういう結果につながるかはある程度は予想もできますし。

とはいえ、それはあくまでも中の人の立場の場合の話なので、開示できない部分も含めた情報がないと
判断できないところですけどねw
これ以上は、お仕事的な形で契約してからじゃないと(お金の問題ではないです)、内部情報見るわけにいかないんで、難しいところです。

いろんな影響がある場合は特に、これ関係あるの?というところにまで波及することもありますからね。


>
>>んー。。。でも、FilesInUse で検索すれば、日本語もいくつか出るんですけどね。。。
>>目的に合うやつがあるかどうかは別として。。。
> すっかり頭から抜け落ちていましたが、とっちゃんさんのブログなんていう日本語記事があるのを思い出しました!!
> ですので、後で舐めまわすように拝見させていただきます!(←ちょっとふざけ過ぎましたw)
>
FilesInUse でヒットするとしたら、RestartManagerネタ意外にないはずですが正直不明w
FilesInUse だとmsi-ml(FreeMLにある、メーリングリスト。こっちはさっき見たけどいくつかありました)はヒットしますよ。
まぁ他にもいろいろヒットしますがw
でも、さっき検索した範囲では私のブログはヒットしなかった気が。。。w


> 新たな疑問というか、確認したい事が生まれたのですが、MsiProcessMessageってプログラム側から呼び出す事もできるようなのですが、
> ISでインストーラーを作り、配布したものに対してその関数を使うっていうのはナンセンスですよね?

DLL形式のカスタムアクションであれば、呼び出し可能です。
こっちは、ブログに記事書いたことがあるかもしれない。。。

引用返信 編集キー/

<前の20件
トピック内ページ移動 / << 0 | 1 >>

このトピックに書きこむ

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

管理者用

- Child Tree -