在安装程序中重命名目录

时间:2008-11-21 12:23:16

标签: windows installer

我正在开发一个需要能够自我更新的Windows应用程序。按下按钮时,它会启动安装程序,然后退出父应用程序。在安装程序期间的某个时刻,安装程序会尝试重命名运行父应用程序的目录,但失败并显示“拒绝访问”如果从桌面运行安装程序,则可以正常运行。

我正在使用CreateProcess来启动安装程序,是否有某种方法可以使用此API或其他API完全独立于父应用程序创建安装程序,以便它不会保留对目录的某些附件。

3 个答案:

答案 0 :(得分:1)

我不相信单独启动安装程序会解决您的问题。这听起来更像是您可以使用ACL操作解决的权限问题。如果应用程序还没有权限使用该文件夹,您可以通过向流程添加必要的权限来编写自定义操作来解决问题。

另一种方法是确保在您控制的自定义操作中发生目录删除(例如,您拥有/维护执行删除的代码,而不是依靠MsiExec为您执行此操作)。然后,将该自定义操作设置为在系统上下文中运行,以使其具有与服务相同的权限。这应该为您的安装程序提供了删除该文件夹的足够权限。

答案 1 :(得分:1)

您应该在Windows安装程序中使用常规更新系统。 出现拒绝访问的消息,因为文件/目录正在使用中。

重命名目录也不是一个好主意。 如果用户点击“修复”或“卸载”会发生什么?

你可以用shellexec启动msi。之后立即终止你的应用程序。 你应该在msi中检查你的应用程序不再运行了。

进行更新。如果文件正在使用中,安装程序会自动重新启动以替换这些内容。

答案 2 :(得分:1)

如果您传递正确的参数,CreateProcess应该可以工作。不要以任何方式引用父进程并将大多数事情设置为NULL。如果这不起作用,那么你可以试试WinExec()。