【发布时间】:2013-04-15 22:06:13
【问题描述】:
我正在尝试使用自动/自我更新程序构建应用程序。该文件将检查更新,然后立即下载文件并替换必要的文件。我一直在尝试将其放入安装程序包中,但遇到了应用程序文件夹只读的问题。我尝试使用多个 SO this one 中的代码删除 readonly 参数,但是在安装程序后,该文件夹仍然是只读的。
[System.Security.Permissions.SecurityPermission(System.Security.Permissions.SecurityAction.Demand)]
public override void Install(IDictionary stateSaver)
{
base.Install(stateSaver);
try
{
string path = this.Context.Parameters["targetdir"];
path = path.Substring(0, path.Length - 1);
DirectoryInfo di = new DirectoryInfo(path);
di.Attributes &= ~FileAttributes.ReadOnly;
di.Refresh();
}
catch (Exception e)
{
}
}
我也尝试将其放入 Commit 方法中。路径肯定被拉了(MessageBox.Show 显示了正确的路径)。
我需要做一些不同的事情来更改应用程序的主文件夹吗?
我不明白为什么更新程序进程在这个问题的上下文中很重要,但它是如何工作的:
- 用户启动更新程序应用程序作为主应用程序的一种“门户”。
- 更新程序会检查服务器是否有特定于该设备的更新。
- 下载新文件并替换当前未锁定的所有文件。
- 然后该 exe 调用一个辅助 exe 并自行关闭。帮助程序 exe 更新剩余文件(即更新程序本身)
- 助手然后启动主应用程序。
【问题讨论】:
-
您无法在 EXE 运行时覆盖它。
-
我不会覆盖那个文件。我有一个单独的 exe 用于更新。
-
@Tom 即使有了启动器,您仍然不是在寻找只读标志,而是在寻找提升的权限
-
你先退出原来的进程吗?
-
Windows 中没有“只读文件夹”的概念。但是,如果没有 UAC 提升,您的程序通常没有对安装位置的写入权限。您必须使用a manifest 向用户征求许可。
标签: c# visual-studio-2010 windows-installer