0

我是 C# 新手,我制作了一个简单的 Windows 窗体应用程序,它基本上更新了游戏的人员文件。

他们必须手动移动和删除某些文件夹,以便每次更改版本。我已经成功地做到了这一点。

但是,在我开始发布之前,我真的应该改进它。我知道我需要更改进程的名称并删除我的描述 ETC。

我偶然发现了一个错误,我认为最好从更有经验的人那里获得关于如何执行此操作的意见,而不是猜测。

我将使用 Inno Setup 为我的应用程序制作安装程序,这样我可以确定它将进入他们的 32 位和 64 位程序文件。所以我知道这将在程序文件中。

所以现在我想知道我是否以正确的方式做到了这一点?我正在使用这种格式来查找他们的程序文件:

string programFilesFolder = Environment.GetEnvironmentVariable("PROGRAMFILES(X86)") ?? Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles);

但是,这适用于所有 Windows 系统(XP、Vista、Win7、Win8)吗?它是否完全准确?我打算使用上面的,然后使用这个:

        string PATCHSELECTOR = Path.Combine(programFiles, @"PATCH SELECTOR");
        if (Directory.Exists(PATCHSELECTOR))
        {
            string GamereliteFolder = Path.Combine(programFiles, @"GAMERELITE~1");
            if (Directory.Exists(GamereliteFolder))

然后我使用字符串方法移动文件。如果文件存在,则在我将文件从 PATCH SELECTOR 复制到 GAMERELITE 之前将其删除。

Windows XP 是否也支持使用嵌入了程序集资源的 .exe,这使得程序需要以管理员身份运行?我以前通过 UAC 使程序集工作,但是如果他们关闭了 UAC 或者如果它是 XP,那将不会总是有效,所以我想我会尝试使用管理程序集。

谁能给我一些见解,想法或链接?

4

3 回答 3

0

几件事:

  • 在已经说明的答案中,Assembly.GetExecutingAssembly().Location 还将为您提供当前“正在执行”的程序集的完整文件路径。(或者,GetCurrentAssembly)

  • 如果我正确阅读了您的问题,那么您正在尝试查找您自己的位置以及另一个应用程序的位置。我强烈建议查看其他应用程序是否具有指定确切位置的注册表项 - 它会使您的复制步骤更加稳定。

于 2012-10-02T04:38:04.827 回答
0

对于可执行文件(对于网站和 Web 应用程序不确定),这将返回可执行文件所在的目录(它实际上是框架将探测要加载的程序集的基本路径,99% 的内容是相同的)。

System.AppDomain.CurrentDomain.BaseDirectory
于 2012-10-01T07:07:33.230 回答
0

此方法适用于位于 Windows PATH 变量中定义的文件夹中的任何可执行文件:

private string LocateEXE(String fileName)
{
    string path = Environment.GetEnvironmentVariable("path");
    string[] folders = path.Split(';');

    foreach (var folder in folders)
    {
        if (File.Exists(Path.Combine(folder, fileName))) 
        {
            return Path.Combine(folder, fileName);
        }
    }

    return String.Empty;
}

用法:

string pathToEXE = LocateEXE("Example.exe");

参考:

于 2012-10-01T06:31:56.627 回答