none
シリアルナンバーの変更方法について教えてください RRS feed

  • 質問

  • いつも、教えていただきありがとうございます。
    ソフトが完成し、インストーラを作成しています。
    ◆手順は以下のようです。
    インストーラのウィザード画面にシリアル番号入力欄を設定するため「ソリューションエクスプローラ」ウィンドウで、セットアッププロジェクトを右クリックし、「表示」→「ユーザーインターフェイス」を選択しました。その後「ダイアログの追加」ダイアログボックスで「ユーザ情報」ダイアログを追加しました。更に「ユーザ情報」ダイアログのプロパティ設定のShowSeralNumerをTrueとしました。その結果インストール時に「ユーザ情報」ダイアログが表示されシリアル番号を入力できるようになりました
    ◆問題点
    シリアル番号の目的はソフトが正規品であることを証明する番号と思いますので制作者が設定すべきものと考えます。
    今回、市販の参考書にあるような番号「111-1111111」を入力したところそれがシリアル番号に設定されました。
    その後、ソフトを改定し、合わせてシリアル番号変更を行おうと思い、再ビルドし、インストール時に別のシリアル番号を指定したところ、シリアル番号エラーが出てしまいます。(当然とも思われますが)
    ◆教示いただきたいこと
    初期設定した番号を変更したいのですがどのようにすればいいのでしょうか
    また、シリアル番号はどこに保存されるのでしょうか

    宜しくお願いします
    わかばマーク
    2010年1月10日 13:16

回答

  • gekkaさんとっちゃんさん回答いただきありがとうございます

    >プロジェクトのデフォルトだと###-%%%%%%%(検証なし3桁-検証あり7桁)ですね。これだと111-1111111以外にも999-0000016なんかも通ります。
    これがどうして通るのか分かりません。実際にやってみると通りますが。


    わかばマーク
    gekkaさんのコメントにあるリンク先のドキュメントを読んでみましたか?そこに書かれていますよ

    わんくま同盟,Microsoft MVP for Visual C++(Oct 2005-) http://blogs.wankuma.com/tocchann/
    • 回答としてマーク TasCal 2010年1月13日 4:37
    2010年1月12日 15:02

すべての返信

  • 規定でのシリアル番号の桁数や検査方法はSerialNumberTemplate プロパティ で決まります。
    プロジェクトのデフォルトだと###-%%%%%%%(検証なし3桁-検証あり7桁)ですね。これだと111-1111111以外にも999-0000016なんかも通ります。

    シリアル番号の保存場所は決まっていません。インストーラーを作成する人が指定します。
    たとえばレジストリに保存する場合、セットアッププロジェクトでレジストリを表示し、保存したい場所に「文字列の値」のキーを作成します。そして、この作成したキーのプロパティのValueに[PIDKEY]とカッコ付きで設定します。これでインストールが成功すればこのレジストリに入力されたシリアル番号が保存されるようになります。

    他の方法はカスタム動作を用意してこの[PIDKEY]プロパティを引数に受けて、検証させたり好きなところに保存したりもできると思います。
    • 編集済み gekkaMVP 2010年1月10日 15:26 検証ありと無しを逆に書いていた
    2010年1月10日 14:54
  • デフォルトについては、gekka さんが書いているので省略。

    VSセットアッププロジェクトの場合は、ProductID プロパティに保存されています。アップグレードで引き継ぎされるわけではありませんが。
    MsiGetProductInfo API を使えば古いやつを取得することは可能ですが、アップグレードとかで自動的にとってくるなどはありません。

    ちなみに。。。。ですが、
    カスタム動作でチェックは、入力時に行うことはできず、インストール開始後の検査になります。
    カスタム動作が動くタイミングの問題なので、VSセットアップのように、UIを好き勝手にいじれないインストーラ作成ツールを
    利用している場合はどうにもなりません。

    この辺をどうにかしたいという場合は、WiXやInstallShieldなどUIを好きに作れるインストーラ作成ツールを利用することになると思います。


    わんくま同盟,Microsoft MVP for Visual C++(Oct 2005-) http://blogs.wankuma.com/tocchann/
    2010年1月12日 6:30
  • gekkaさんとっちゃんさん回答いただきありがとうございます

    >プロジェクトのデフォルトだと###-%%%%%%%(検証なし3桁-検証あり7桁)ですね。これだと111-1111111以外にも999-0000016なんかも通ります。
    これがどうして通るのか分かりません。実際にやってみると通りますが。


    わかばマーク
    2010年1月12日 12:58
  • gekkaさんとっちゃんさん回答いただきありがとうございます

    >プロジェクトのデフォルトだと###-%%%%%%%(検証なし3桁-検証あり7桁)ですね。これだと111-1111111以外にも999-0000016なんかも通ります。
    これがどうして通るのか分かりません。実際にやってみると通りますが。


    わかばマーク
    gekkaさんのコメントにあるリンク先のドキュメントを読んでみましたか?そこに書かれていますよ

    わんくま同盟,Microsoft MVP for Visual C++(Oct 2005-) http://blogs.wankuma.com/tocchann/
    • 回答としてマーク TasCal 2010年1月13日 4:37
    2010年1月12日 15:02
  • gekkaさん とっちゃさん ありがとうございます

    シリアル番号の仕組みが少しわかりました。
    SerialNumberTemplate
    プロパティを操作することにより自分が意図としたシリアル番号を作成できるのですね
    わかばマーク
    2010年1月13日 4:51