设置项目中存在的xml文件问题
我使用一个xml文件来确定用户是否是第一次使用,因为我编写了如下代码设置项目中存在的xml文件问题,xml,setup-project,Xml,Setup Project,我使用一个xml文件来确定用户是否是第一次使用,因为我编写了如下代码 <?xml version="1.0" encoding="utf-8"?> <UserFirstDetails> <IsFirstTime>True</IsFirstTime> <ProductOrderNum></ProductOrderNum> <Drive></Drive> </UserFirstDetails>
<?xml version="1.0" encoding="utf-8"?>
<UserFirstDetails>
<IsFirstTime>True</IsFirstTime>
<ProductOrderNum></ProductOrderNum>
<Drive></Drive>
</UserFirstDetails>
string filePath1 = Application.StartupPath;
string org1 = filePath1 + "\\Input\\UserFirstDetails.xml";
UsrDetails.Load(org1);
XmlNode NdeFirst= UsrDetails.SelectSingleNode("UserFirstDetails/IsFirstTime");
FirstTime = NdeFirst.InnerText;
if (FirstTime == "True")
{
NdeFirst.InnerText = "False";
XmlNode productnum = UsrDetails.SelectSingleNode("UserFirstDetails/ProductOrderNum");
productnum.InnerText = 1234567;
XmlNode drivetag = UsrDetails.SelectSingleNode("UserFirstDetails/Drive");
drive =C;
FileInfo fp = new FileInfo(org1);
fp.Attributes = FileAttributes.Normal;
UsrDetails.Save(org1);
}
当我第一次安装应用程序时,它对我来说工作正常,但是当我卸载并再次重新安装应用程序时,我得到了一个xml
<?xml version="1.0" encoding="utf-8"?>
<UserFirstDetails>
<IsFirstTime>False</IsFirstTime>
<ProductOrderNum>1234567</ProductOrderNum>
<Drive>C</Drive>
</UserFirstDetails>
如果该Xml文件在您的安装程序中并由MSI文件安装(换句话说,您的应用程序没有创建它),则卸载将卸载它。默认情况下,MSI安装程序安装的每个文件都将被卸载 如果要进行RemovePreviousVersions更新(在递增安装项目版本后),则不会覆盖现有文件,因为覆盖规则包括“不替换已更改的数据文件” 如果在应用程序的代码中创建该文件,则卸载不会将其删除 我还建议不要使用Application.Startup路径,因为这通常是Program Files文件夹,在那里更新文件需要提升。用户的应用程序数据是数据文件的更好位置(毕竟,这就是为什么它被称为数据文件的原因)
对于这样的单个数据项,我可能会使用HKCU注册表项。每台机器安装的问题是,多个用户可以运行该应用程序,因此运行该应用程序的第一个用户会将每个用户标记为第一个用户,因为另一个登录的用户将获得与第一个用户相同的Xml文件 当我们取消安装应用程序时,是否可以将文件更改为原始文件?非常感谢@PhilDW。我得到了正确的输出,使用了用户应用程序数据,正如您建议的那样,我卸载项目时没有删除xml文件。现在,我仅使用用户应用程序数据文件夹,并且我一直将安装项目的“上一版本”属性删除为true。我可以知道原因吗
<?xml version="1.0" encoding="utf-8"?>
<UserFirstDetails>
<IsFirstTime>True</IsFirstTime>
<ProductOrderNum></ProductOrderNum>
<Drive></Drive>
</UserFirstDetails>
Always create-true
condition -
Transitive-False