更新正在运行的.exe文件c#

时间:2015-05-06 15:18:46

标签: c# winforms

我开发了一个将各种内容导入数据库的应用程序。用户将通过运行我们内部应用程序服务器的快捷方式来使用它。由于工作时间不同,我需要能够在有人使用时更改.exe文件。 我的同事建议的方式是:

1.保存应该运行的文件的xml / ini文件名。

2.将新的.exe,f.e import_2.exe复制到目标位置。

3.从ini文件中执行.exe文件。

我在第3点停了。如何更改目标文件? Application.ExecutablePath无法更改。

@EDIT最终方法。简单,但不是很优雅。从长远来看,你可能最好使用ClickOnce。

static class Program
{
    /// <summary>
    /// The main entry point for the application.
    /// </summary>
    [STAThread]
    static void Main()
    {
        IniParser parser = new IniParser(SupportingClass.AssemblyDirectory + "settings.ini");
        string exe_location = parser.GetSetting("ApplicationToRun", "App");

           string fullName = System.Reflection.Assembly.GetEntryAssembly().Location;
        string myName = System.IO.Path.GetFileName(fullName).ToLower();
        if (exe_location != myName)
        {
            string arguments = "";
            foreach (var item in Environment.GetCommandLineArgs())
            {
                arguments+=item+' ';
            }
            if (System.IO.File.Exists(AppDomain.CurrentDomain.BaseDirectory + exe_location))
            {
                System.Diagnostics.Process starter = System.Diagnostics.Process.Start(exe_location, arguments);
                return;
            }
        }
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new DbImporting());
    }
}

1 个答案:

答案 0 :(得分:1)

当然你无法改变它 - 你已经在运行exe了!相反,您需要使用一些引导程序。 @ agent5566的解决方案非常好 - 这意味着你将把引导程序作为实际应用程序的一部分;因为exe必须在内存中加载才能在几微秒后关闭:)

IMO最简单的方法是简单地链接到bat文件,而不是实际的应用程序可执行文件。这样,您可以随时更改bat,并将其指向(当前)正确的可执行文件。

bat文件当然只有一行:

@start myApp_v2.exe

如果您对打开的命令窗口感到困扰,只需确保将快捷方式设置为最小化启动窗口。

但请注意,在.NET中开发这样的应用程序通常不是一个好主意。 .NET应用程序具有安全设置,默认情况下不允许从网络驱动器运行的应用程序以完全信任权限运行(您的应用程序可能无法运行)。你有没有考虑使用例如ClickOnce的?它也会自动为您处理更新,非常方便:)