2

以下のように、WinApp に文字列フィールドがあるとします。

public string UsingTheApplicationFrom = "まだ";

ここで、アプリケーションの最初の実行時に、フィールドの値を永久に変更したいと考えています。例:UsingTheApplicationFrom = "‎Friday, ‎January ‎21, ‎2011";

C# WinApp で可能ですか?
案内していただけますか?

編集:
データベースやファイル、レジストリなどは使いたくありません。

4

6 に答える 6

3

「最初のシステム (アプリケーションを初めて実行するシステム) のみがアプリケーションを使用できる、アプリケーションのセキュリティのタイプ」を探しています。あなたが販売するソフトウェアの各コピーは、一度に 1 台のコンピューターにしかインストールできないということだと思います。

解決すべき問題が 2 つあります。

  • コンピュータの一意の識別子を生成する方法
  • 識別子の値を格納する方法

一意の識別子に使用するオプションはいくつかありますが、どれも優れたものではありません。コンピューターのハードウェアを変更したとき、コンピューターが壊れたとき、またはソフトウェアをあるコンピューターから別のコンピューターに移動したいときに、顧客からのサポート要求に備えてください。一意の識別子を計算する適切な方法は、この記事です(コード プロジェクトの記事が利用できないため、ミラー リンク)。

この識別子を文字列として app.config ファイルに保存することをお勧めします (詳細については、このリンクProperties.Settingsから開始してください)。プレーン テキストで表示されますが、「4876-8DB5-EE85-69D3-FE52-8CF7-395D-2EA9」のように見える場合、ライセンスのないユーザーは自分のマシンの値を変更する方法を知ることができますか? 一致しない場合は、ウェブサイトまたは電話でサポートを受けてください。

この値をいつ設定するかを決める問題はまだあります。プログラムを初めて実行するときに保存するのではなく、インストーラーの一部として設定することをお勧めします。ファーストラン。インストーラーには、ある種の登録コードと、中央のライセンス サーバーと通信する方法が必要になる場合があります。(はい、これは複雑です。人々があなたのライセンスをハッキングする可能性があるとどの程度決心していると思いますか?)

于 2011-01-21T15:20:29.167 に答える
3

推測ですが、「いつも」とは「永遠に」という意味だと思います。アプリケーションの App.config でキーを簡単に作成し、最初の実行時に入力することができます。

<add key="UsingTheApplicationForm" value="Not Yet"/>

最初の実行時に、次のように更新します -

            System.Configuration.Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
            config.AppSettings.Settings["UsingTheApplicationForm"].Value = DateTime.Now.ToShortDateString();
            // Save the configuration file.
            config.Save(ConfigurationSaveMode.Modified);
            // Force a reload of a changed section.
            ConfigurationManager.RefreshSection("appSettings");

2 回目の実行で、キー値が「まだ」に等しいかどうかを確認します。そうでない場合は、これが最初の実行ではないことを意味します。

于 2011-01-21T14:50:36.063 に答える
2

を使用したいと思うかもしれませんがDateTime、特にDateTime.Now- 質問へのコメントと同様に、よくわかりません。

したがって、次のようなものです:

UsingTheApplicationForm = String.Format("{0:dddd, MMMM d, yyyy}", DateTime.Now); 

「常に」の部分は非常に紛らわしいですが、私は自分の翻訳を受け入れるつもりですalways = each startup

UsingTheApplicationFormのプロパティ/変数名を考えると、この値は説明的なものではなく、指標的なフィールドであると推測します。このため、DateTime.Now書式設定なしで使用するだけでなく、ブール値 (状況に応じて異なります) を使用することもできますか?

編集:

この方法またはその他の方法の使用と、次回の実行のためにこのデータを永続化する方法については、次の質問と回答を参照してください...

同じアプリを使用して実行時に app.config を編集する

于 2011-01-21T14:37:05.223 に答える
1

文字列オブジェクトだけでそれを行う方法はありませんが、それを行う単純なオブジェクトを作成できます。

public class ApplicationInfo
{
    private ApplicationStartTime()
    {
        this.StartTime = new DateTime().Now;
    }

    public DateTime StartTime
    {
        get; private set;
    }

    public Create()
    {
        return new ApplicationStartTime();
    }
}

私はそれをコンパイルしていないので、マイナーな構文エラーが 1 つまたは 2 つある可能性があります。次のように呼び出します。

var applicationInfo = ApplicationInfo.Create();

Debug.WriteLine(applicationInfo.StartTime.ToString());
于 2011-01-21T14:39:41.883 に答える
1

program.cs またはプログラムのメイン エントリ ポイントで public static datetime を宣言します。

プログラムを最初に実行するときに、日時を設定して将来アクセスすることができます。

public static Datetime m_StartDate = DateTime.now;

public static void Main(args)
{
m_StartDate = DateTime.Now;
}

次に、他のフォームで (コードを Program.cs に追加したと仮定して)

txtStartTime.Text = Program.m_StartDate.toString();
于 2011-01-21T14:40:36.757 に答える
1

私はこの方法が好きです: http://windowsclient.net/blogs/suryahg/archive/2008/08/11/persist-winforms-application-settings.aspx

于 2011-01-21T14:37:55.423 に答える