从浏览器启动时C#:Directory.getCurrentDirectory()

dog*_*ose 1 c# uac administrator process

我正在为我的应用程序开发一个Autoupdater.(结合安装程序,更新程序和删除工具)

我想自动设置所有Stuff:

  • Startmenu Entry
  • C:\ Program Files中的文件夹
  • 应用程序数据中的配置文件夹(取决于漫游/本地)
  • "程序和功能"中的软件删除 - 输入
  • 桌面快捷方式.

这非常有效.要写入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();
        }
Run Code Online (Sandbox Code Playgroud)

如果用户将AppLauncher.exe保存在文件夹中的某个位置并通过双击启动它,此步骤也可以正常工作.

如果用户决定从浏览器点击"运行",安装程序将运行到显示的异常,说"找不到"AppLauncher.exe.我假设,从浏览器启动文件将设置不同的WorkingDirectory,因此

Directory.GetCurrentDirectory()
Run Code Online (Sandbox Code Playgroud)

将不会返回文件所在的适当值.如果用户决定给该文件另一个名称,它也可能不起作用.

那么,我能做些什么呢?

有没有像File.GetCurrentFile():P

pen*_*tur 5

更换

Directory.GetCurrentDirectory() + @"\AppLauncher.exe"
Run Code Online (Sandbox Code Playgroud)

System.Reflection.Assembly.GetEntryAssembly().Location
Run Code Online (Sandbox Code Playgroud)

(如果你

但是,最好不要重新发明自行车,而是使用已经实现了所有集成功能并已经解决了所有错误的可用安装程序解决方案之一.

例如:ClickOnce,WiX.