dポイントプレゼントキャンペーン実施中!

質問概要
タイトルの通り

質問詳細
Windowsアプリとか、
「1回や2回、試しに使ってもらっても良いが、これを使って業務とかやられたら敵わん
 そのぐらい何度も使いたいならキチンと対価を払って契約してもらわんと」
という場合があります。

マイクロソフト社などの超巨大ソフト会社なら、購入したユーザーにIDを発行して、ソフト起動のたびに開発会社のサーバーにアクセスし、IDが有効の場合のみ、ソフトの利用を許可する、
といったいった仕組みにするでしょう。

こういう、「配布元がみとめた、正規の利用者のみ、使用を許可する」
という仕組みをエクセル、VBAマクロプログラムなどに同様の仕組みを装備するにはどうしたらいいでしょうか?

条件
配布するプログラムは、エクセルマクロ,VBAなどのレベル。
すなわち、前述の、「利用者にIDを発行して、起動のたびに開発元にアクセスさせて。。。」
という大掛かりな仕組みはできない。
加えて、エクセルマクロやVBAレベルなので、コピーもし放題。
配布は対面ならUSBメモリーやSDカードなどの媒体を介して、非対面ならメール添付など。
つまり日曜プログラマーがつくる、お手軽に配布できるプログラムなので、
私たち相手が無制限に友達に配りまくる、というシュチュエーションもあり得る、ということ。

こういう条件下で、
数回、数日のお試し利用ならいいが、それ以上の(例えば10回以上)利用はできない、
とするにはどういう方法があるでしょうか?

自分で考えたのですが、
例えば起動時にパスワードを求める、としても、最初に渡した相手が、その次に渡す時にパスワードもセットで渡してしまえば何の効力もありません。
次に考えたのが、
起動するごとに過去の起動回数をカウントし、ログなどに記録して、制限回数以上の起動をさせない、というもの。これも、渡した相手(さらにはそれ以降の配布先)が、渡されたプログラムをマザーとして保存しておき起動制限がかかったら、マザーをコピーして使ってしまえば起動回数制限などかいくぐってしまいます。
次に考えたのが、渡したその日のみ、起動できる。日付が変われば起動しない、というソースコードを組んでおく、というものです。(まあ、起動回数制限とは少し異なりますが、大異はないでしょう)
これはどうでしょうかね、相手に渡すたびに、毎回ソースコードの日付を変える、ってのも面倒ですが。。。

いい方法や実際にソフト会社が使う方法を教えてください

質問者からの補足コメント

  • > 加えて、エクセルマクロやVBAレベルなので、コピーもし放題。
    配布は対面ならUSBメモリーやSDカードなどの媒体を介して、非対面ならメール添付など。
    つまり日曜プログラマーがつくる、お手軽に配布できるプログラムなので、
    私たち相手が無制限に友達に配りまくる、というシュチュエーションもあり得る、ということ。

    の部分の真意を補足します。

    回答者様によっては
    「サーバーダウンロードで配布する時に、相手のコンピュータの固有番号を記録しておき、起動時にその記録した固有番号と、ソフトを起動したパソコンの固有番号を照合し、不一致だったら、プログラムを途中終了させる、という手があるよ。
    これならダウンロードしたパソコン以外では起動しないよ」
    というお答えになるかもしれませんが、
    上記のようなお手軽な配布方法をとるので
    その方法は採れません、
    ということです。

      補足日時:2024/05/17 14:23

A 回答 (5件)

No.2です。



> これ、回数制限上限到達したら、アンインストールして再度インストールしたらまた使えるようになるのではありませんか、その可能性はないでしょうか?

そのソフトウェアの開発側がアンインストール機能を提供していて、その中でレジストリーのクリアを行うようにしていれば、再インストールすると再度まっさらな状態からはじまりますからまた規定回数使えることになります。
そういう機能を提供せず、利用者はインストールフォルダごと削除するだけであればレジストリーはそのままなので、インストーラーの中で「所定のレジストリーのエントリーが無ければ作成して初期値0をセットする。有れば”既定の利用回数を超えているのでインストール出来ません”といったエラーダイアログを表示して終了する」といった仕様にすれば再利用を防止できるでしょう。

まずはWindowsのレジストリーとはどういうもので、どんな風に使うのかを勉強されるとよいかと思いまます。
市販のソフトウェアや広く使用されているシェアウェア、フリーウェアの多くはレジストリを使って様々な機能や制限を実現しています。

参考まで。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

お礼日時:2024/05/20 18:09

一方向関数じゃなくて暗号学的ハッシュ関数かもしれない。

とにかく、あなたは使用を許可する日付からこの秘密の関数でパスワードのリストを生成して使用者に与える。あなたのプログラムは今日のパスワードを今日の日付から同じ関数で生成して使用者が与えられたリストの中にそれを知っているかを試す。使用者は今日の日付からパスワードが生成されていることを知っていても具体的な関数を知らなければ今日のパスワードを予想できないというのがこの関数に課せられた前提。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました

それって、
「ソースコードにこのプログラムが実行できる日付を直書きして、起動時にパソコンの内部時計、あるいはインターネット経由しての現在日付と照合して、不一致なら途中終了」
と変わらないと思うのですが。。。。

お礼日時:2024/05/23 20:27

素人だけど考えてみた。

パスワードを今日の日付から一方向関数で生成する、この関数を秘密にする。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
もうちょっと詳しく説明してください。

お礼日時:2024/05/20 18:10

Windowsソフトウェアならインストーラーを作成し、その中でレジストリーに該当ソフトウェアの起動回数を保持するエントリーを追加して初期値0をセット。


該当ソフトウェアの起動時の初期処理の中でそのエントリーの値をチェックし、規定の回数以下ならその値をインクリメントして正常起動。既定の回数を超えていたらエラーダイアログを表示して終了。
そんな感じでしょう。
“既定の回数”もレジストリーに保持するようにすれば、配布先ごとに利用回数の制限値を変えることも可能になります。

Excelのテンプレートなどを配布するのであればVBAで所定の機能(マクロ等)が起動されるたびに上記と同様のことを行えばよいかと思います。

参考まで。
    • good
    • 1
この回答へのお礼

ご回答ありがとうございます

そういう方法でおこなうんですね

これ、回数制限上限到達したら、アンインストールして再度インストールしたらまた使えるようになるのではありませんか、その可能性はないでしょうか?

お礼日時:2024/05/17 15:40

相違制限ができないからネット認証にしてるわけで

    • good
    • 0
この回答へのお礼

ご回答ありがとうございます

ネットに接続せずにパソコン単独で使うと,回数制限できないんですね

お礼日時:2024/05/17 15:38

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A