我目前正在为我的应用程序开发自动更新程序。(结合安装程序、更新程序和删除工具)
我想自动设置所有的东西:
- 开始菜单项
- C:\Program Files\ 中的文件夹
- 应用数据中的配置文件夹(取决于漫游/本地)
- “程序和功能”中的软件删除条目
- 桌面快捷方式。
这一切都很好。要写入程序文件和注册表,该工具需要管理员权限 ofc。因此,在选择了所需的软件后,我添加了 AppLauncher 的“重新启动”。就像这样:
ProcessStartInfo pi = new ProcessStartInfo(Directory.GetCurrentDirectory() + @"\AppLauncher.exe");
pi.Verb = "runas";
pi.Arguments = "install " + this.appItem.APID;
Process p = new Process();
p.StartInfo = pi;
try
{
p.Start();
Application application = Application.Current;
application.Shutdown();
}
catch (Exception ex)
{
MessageBox.Show("Unable to install the application.\n\n" + ex.ToString(), "Error",
application.Shutdown();
}
如果用户将 AppLauncher.exe 保存在文件夹中的某个位置并通过双击它启动它,此步骤也非常有效。
如果用户决定从浏览器中点击“运行”,安装程序会遇到显示的异常,说“找不到 AppLauncher.exe”。我假设,从浏览器启动文件将设置一个不同的工作目录,因此
Directory.GetCurrentDirectory()
不会返回文件所在位置的适当值。如果用户决定给文件另一个名称,它也可能不起作用。
那么,我能做些什么呢?
有没有类似 File.GetCurrentFile() :P