我正在开发一个需要能够自我更新的Windows应用程序。按下按钮时,它会启动安装程序,然后退出父应用程序。在安装程序期间的某个时刻,安装程序会尝试重命名运行父应用程序的目录,但失败并显示“拒绝访问”如果从桌面运行安装程序,则可以正常运行。
我正在使用CreateProcess来启动安装程序,是否有某种方法可以使用此API或其他API完全独立于父应用程序创建安装程序,以便它不会保留对目录的某些附件。
答案 0 :(得分:1)
我不相信单独启动安装程序会解决您的问题。这听起来更像是您可以使用ACL操作解决的权限问题。如果应用程序还没有权限使用该文件夹,您可以通过向流程添加必要的权限来编写自定义操作来解决问题。
另一种方法是确保在您控制的自定义操作中发生目录删除(例如,您拥有/维护执行删除的代码,而不是依靠MsiExec为您执行此操作)。然后,将该自定义操作设置为在系统上下文中运行,以使其具有与服务相同的权限。这应该为您的安装程序提供了删除该文件夹的足够权限。
答案 1 :(得分:1)
您应该在Windows安装程序中使用常规更新系统。 出现拒绝访问的消息,因为文件/目录正在使用中。
重命名目录也不是一个好主意。 如果用户点击“修复”或“卸载”会发生什么?
你可以用shellexec启动msi。之后立即终止你的应用程序。 你应该在msi中检查你的应用程序不再运行了。
进行更新。如果文件正在使用中,安装程序会自动重新启动以替换这些内容。
答案 2 :(得分:1)
如果您传递正确的参数,CreateProcess应该可以工作。不要以任何方式引用父进程并将大多数事情设置为NULL。如果这不起作用,那么你可以试试WinExec()。