「アプリケーションの追加と削除」から削除される – プログラミング – Home

「アプリケーションの追加と削除」から削...
 
通知
すべてクリア

[解決済] 「アプリケーションの追加と削除」から削除される


kayoppe
 kayoppe
(@kayoppe)
ゲスト
結合: 22年前
投稿: 8
Topic starter  

アンインストーラをMFCのダイアログベースで作っています。
HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\
CurrentVersion\\Uninstall\\xxx
のDisplayNameとUninstallStringを登録して「アプリケーションの
追加と削除」から正しくアンインストールプログラムが呼ばれる
かを試しました。
一応呼ばれましたが、レジストリ等の削除は行わず、その画面を
閉じただけで、「アプリケーションの追加と削除」の一覧から削除されます。
「アプリケーションの追加と削除」を起動し直すと、また表示されます。
他のプログラムのアンインストールでは、キャンセルボタンを押しても
一覧から削除されることはありません。
一旦、一覧から削除されないようにするにはどうすればいいでしょうか?

VC++6.0・WinXpを使っています。
よろしくお願い致します。


引用未解決
トピックタグ
PATIO
(@patio)
Famed Member
結合: 4年前
投稿: 2660
 

調べて書いているわけではなくてもしかしたらと言うレベルの話なんですが、
「アプリケーションの追加と削除」が呼び出したアンインストールプログラムの
終了ステータスを見ていると言う事はありませんか?
kayoppeさんが作成したアンインストールプログラムの終了ステータスが
キャンセル時も正常終了時も同じなら「アプリケーションの追加と削除」からは
どういう終わり方をしたのかわからないと思います。
どういう返却値なら良いのかと言うのは調べてみないとわからないと思いますが、
調べる糸口にはなると思いますので、一度調べてみてはいかがでしょう。


返信引用
kayoppe
 kayoppe
(@kayoppe)
ゲスト
結合: 22年前
投稿: 8
Topic starter  

できました。
今までは、こんな感じでやっていました。
RegSetValueEx(hChildKey, UninstallString, 0, REG_SZ, (CONST BYTE*)m_szFile,
sizeof(m_szFile)+1);

最後の+1をとったらできました。
問題は+1は意味がなかったと思いますが、あっても問題はないと思います。
結局原因は不明ですが、とりあえずできました。

ありがとうございました。


返信引用
PATIO
(@patio)
Famed Member
結合: 4年前
投稿: 2660
 

解決してしまっていますが、

sizeof(m_szFile)+1
はまずいと思いますよ。
これだと確保したメモリを超えてしまいます。

HELPをよく読んでみましょう。
REG_SZ・・・の時は、'\0'まで含めての長さを設定します
とあります。

従って正解は、
_tcslen(m_szFile)+1
だとおもいますよ。
まあ、通常C言語やC++言語で文字列用のバッファを確保する場合は、'\0'文字まで
含めた形で行うはずなので上記なら確保したメモリを超えてしまう事はないと思います。


返信引用
aetos
(@aetos)
Noble Member
結合: 6年前
投稿: 1480
 

大抵の場合、Unicode は使わないので
strlen( m_szFile ) + 1
でよいかと思われます。

Unicode を意識するなら、RegSerValueEx はバイト単位ですが _tcslen は文字数を返す
ので、
( _tcslen( m_szFile ) + 1 ) * sizeof( TCHAR )
とすべきです。

より簡単な方法としては、StringCbLength とゆーのもあります。


返信引用
kayoppe
 kayoppe
(@kayoppe)
ゲスト
結合: 22年前
投稿: 8
Topic starter  

とても勉強になりました。
一応Unicodeを意識しているので、
( _tcslen( m_szFile ) + 1 ) * sizeof( TCHAR )を使おうと思います。

勉強不足でした。
ありがとうございます。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました