c#winforms:确定程序的第一次运行
我需要向导一次,第一次安装后运行我的windows窗体应用程序。我可以使用像firstrun = false我想的用户设置。但我也需要处理卸载程序的情况,然后重新安装。该用户设置将如何重置?它已经存在于... \ Users - user - \ AppData \ Roaming ...中的配置文件中。我需要向导在任何重新安装后运行,所以我需要重置该设置。我是否需要使用自定义安装程序操作执行此操作?c#winforms:确定程序的第一次运行
这可能是最好让您的安装程序在注册表中创建FirstRun项并将其设置为true(或1或其他),并确保您的卸载程序完全删除此项。然后让应用程序在启动时读取该键,并将其设置为false(或0或其他)。
如果用户卸载并重新安装应用程序,他们将在第一次运行该应用程序时再次看到该向导。
您可以在程序目录中创建一个文件。卸载程序不会删除它,因为它不是由安装程序添加的。
在设置文件或resx文件中使用名称/值对像FirstRun = true。在启动时阅读此文件,如果为true,则显示向导并将其设置为false。
每次安装时,文件的副本都应该被覆盖,因此您将得到FirstRun = true。每次(重新)安装后,向导都会运行
这不会正确地与多个Windows用户的情况下工作。如果文件是每次安装,则第一个运行向导将只为第一个用户运行。如果它是每个用户,安装将仅覆盖安装用户。 – 2008-10-17 06:05:19
两种不同的东西 - 如果它是一个应用程序级别的设置,这种想法会工作..存储和寻找它在像程序的用户无关的位置/安装文件夹。如果是用户级设置,请将其存储在用户特定的位置。依赖于REQ是什么... – Gishu 2008-10-17 06:31:03
Windows注册表看起来像是这种设置的适当位置。安装程序步骤可能会在用户重新安装时重置密钥,或者如果您不希望在安装之间保留任何设置,则可以在卸载时清除注册表项。
如果多个Windows用户使用相同的应用程序,则每个用户的真/假设置将无法正常工作。作为Windows用户之一,安装程序仅运行一次,并且无法访问该计算机上所有其他用户的每用户设置。
您可以在安装时将每台机器标志设置为true。但是,如果管理员用户运行FRW并对其进行更改,则其他用户将无法获得FRW。如果非管理员用户运行FRW,他们将无法更改它,并将在下次应用程序再次运行时运行FRW。
您需要的是机器范围的isntallation时间戳和FRW运行时的每用户时间戳。以下是该场景:
安装时,在您的应用程序的HKLM注册表中添加一个时间戳。对于每个用户,当应用程序启动时,请在上述每个用户设置文件中检查第一次运行wizzard(FRW)的时间戳。如果每个用户的时间戳早于HKLM安装戳,请为该用户运行FRW并更新每个用户的设置文件。
如果应用被卸载,然后重新安装,安装程序会更新HKLM时间戳,从而导致FRW要为所有用户再次运行。
我建议改变你的程序的行为,并重新安装后不重新配置设置。毕竟,用户已经做出了他或她的选择,为什么又要问同样的问题呢?
可以存储已经运行配置向导的用户列表。
此列表可以存储在机器级配置文件或应用程序目录中。当应用程序重新安装时,可以清除该列表。
而不是看着FirstRun,你只需检查与列表中的当前用户。如果用户在列表中,则跳过配置向导。如果用户不在列表中,请显示配置向导。
到@Franci佩诺夫的建议类似,我会做这样的:
在安装,使用创建一个新生成的GUID注册表值HKLM \ SOFTWARE \ YourCompany \ YourApp \ InstallId。
在为用户首次运行,比较该值HKCU \ SOFTWARE \ YourCompany \ YourApp \ InstallId。
如果HKCU值不存在或者它们不同,请运行您的首次运行逻辑,然后将HKLM \ Software \ YourCompany \ YourApp \ InstallId复制到HKCU \ Software \ YourCompany \ YourApp \ InstallId。
这具有不受时间变化影响的(微小)优势。
如果此注册表项是每个用户,则只有安装该应用程序的用户才能获得FRW。如果该键是HKLM,只有管理员用户将能够更新,因此,任何非管理员用户会不断收到FRW,直到管理员运行的应用程序。 – 2008-10-17 06:13:25