永远改变C#WinApp中String的值?

时间:2011-01-21 14:33:29

标签: c# .net winapp

假设我的WinApp中有一个String字段,如下所示:

  

public string UsingTheApplicationFrom =   “还没有”;

现在,我想在第一次运行我的应用程序时永远改变字段的值。例如:UsingTheApplicationFrom = "‎Friday, ‎January ‎21, ‎2011";

是否可以在C#WinApp中使用?
你能指导我吗?

编辑:
我不想使用数据库或文件或注册表或其他东西。

6 个答案:

答案 0 :(得分: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");

在第二次运行时检查键值是否等于“Not Yet”。如果不是,则意味着这不是第一次运行。

答案 1 :(得分:2)

您正在寻找“我的应用程序的一种安全性,只有第一个系统(第一次运行应用程序)才能使用我的应用程序”。我认为您的意思是您销售的每个软件副本一次只能安装在一台计算机上。

您有两个问题需要解决:

  • 如何为计算机生成唯一标识符
  • 如何存储标识符值

您有多个选项可用于唯一标识符,其中没有一个很好。准备好客户在更换计算机硬件,计算机中断或希望将软件从一台计算机移动到另一台计算机时的支持请求。由于代码项目文章不可用,因此计算唯一标识符的正常方法是this articlemirror link

我建议只将此标识符作为字符串存储在app.config文件中(使用Properties.Settings,从this link开始获取更多信息)。它将以纯文本形式显示,但是当看起来像“4876-8DB5-EE85-69D3-FE52-8CF7-395D-2EA9”时,未经许可的用户如何知道将其更改为机器的值?如果不匹配,请将它们指向您的网站/电话以获得支持。

你仍然有决定何时设置此值的问题 - 我主张将其设置为安装程序的一部分而不是在程序第一次运行时保存它,因为那时你仍然有问题要确定何时该程序是第一次运行。安装程序可能需要某种注册代码和方法来与中央许可服务器通信。 (是的,这确实变得复杂了 - 你认为人们可能决定破解你的许可?)

答案 2 :(得分:1)

我想也许你想使用DateTime,特别是DateTime.Now - 就像对问题的评论一样,我不太确定。

所以,比如:

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

“总是”部分非常令人困惑,我只是想购买我自己的翻译,always = each startup

我还猜想,给定UsingTheApplicationForm的属性/变量名称,该值是指示性字段,而不是描述性字段;出于这个原因,可能只是使用DateTime.Now没有任何格式,或者甚至只是一个布尔值(取决于你的情况)适合账单?

修改

有关使用此方法或任何其他方法的信息,以及为下次运行保留此数据的信息,请参阅以下问题和答案...

Editing app.config in execution time using the same App

答案 3 :(得分:1)

答案 4 :(得分:1)

除了字符串对象之外没有办法做到这一点,但你可以创建一个简单的对象来实现它:

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

    public DateTime StartTime
    {
        get; private set;
    }

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

我没有编译,所以可能会有一两个小的语法错误。你会像这样调用它:

var applicationInfo = ApplicationInfo.Create();

Debug.WriteLine(applicationInfo.StartTime.ToString());

答案 5 :(得分:1)

在program.cs或程序的主入口点声明一个公共静态日期时间。

首次运行程序时,您可以设置日期时间并在以后访问它。

public static Datetime m_StartDate = DateTime.now;

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

然后以其他形式(假设您将代码添加到Program.cs)

txtStartTime.Text = Program.m_StartDate.toString();