【问题标题】:Detecting the time when the program was installed [duplicate]检测程序的安装时间[重复]
【发布时间】:2013-04-05 09:49:26
【问题描述】:

我能否以某种方式检测使用 .Net 或 Win32 api 或任何其他方式安装程序的时间?

【问题讨论】:

    标签: .net winapi registry


    【解决方案1】:

    这会得到安装的日期,我不确定你能得到时间

    string registry_key = @"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall";
    using(Microsoft.Win32.RegistryKey key = Registry.LocalMachine.OpenSubKey(registry_key))
    {
        foreach(string subkey_name in key.GetSubKeyNames())
        {
            using(RegistryKey subkey = key.OpenSubKey(subkey_name))
            {
                Console.WriteLine(subkey.GetValue("DisplayName"));
                Console.WriteLine(subkey.GetValue("InstallDate"));
            }
        }
    }
    

    您可以使用所有这些字段

    更多信息请参考this 回答。

    您可以通过使用 Windows Installer API 来获得时间! 要使用的函数是MsiGetProductInfo,属性名称是INSTALLPROPERTY_INSTALLDATE,但WMI 是重量级的。

    这里是来自here的更多信息

    INSTALLPROPERTY_INSTALLDATE此产品上次接受服务的时间。每次从产品应用或删除补丁或使用 /v 命令行选项修复产品时,都会替换此属性的值。如果产品未收到任何维修或补丁,则此属性包含此产品在此计算机上安装的时间。

    示例:

    [DllImport("msi.dll", CharSet=CharSet.Unicode)]
    static extern Int32 MsiGetProductInfo(string product, string property, [Out] StringBuilder valueBuf, ref Int32 len);
    
    Int32 len = 512;
    System.Text.StringBuilder builder = new System.Text.StringBuilder(len);
    MsiGetProductInfo("{4B3334CE-06D9-4446-BBC5-EB4C9D75BFF6}", "INSTALLPROPERTY_INSTALLDATE", builder , ref len);
    

    【讨论】:

      【解决方案2】:

      你必须在注册表中找到它。

      这就是为什么它与.NETWinAPI 无关。

      例如:

      HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\InstallDate
      

      显示自 1970 年 1 月 1 日以来Windows 的安装时间(以秒为单位)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-03-11
        • 1970-01-01
        • 2015-04-16
        • 1970-01-01
        • 1970-01-01
        • 2012-08-02
        • 2012-07-08
        • 2013-10-10
        相关资源
        最近更新 更多