具有可变设置的单个 exe

Posted

技术标签:

【中文标题】具有可变设置的单个 exe【英文标题】:single exe with changeable settings 【发布时间】:2011-04-14 18:18:05 【问题描述】:

我正在尝试制作一个简单的应用程序,该应用程序将用于将 Web 浏览器控件指向我们工作中的一些 Web 应用程序。我想只有一个 exe 文件,但也有一个管理窗口来更改一些设置,并让它们在应用程序关闭时保持不变。那可能吗?我查看了应用程序设置资源部分,但据我所知,这会生成一个加载设置的文件。

我不想解析一个文件或只拥有一个文件,所以如果可能的话,请不要建议这样做。

【问题讨论】:

【参考方案1】:

只需使用应用程序设置 - 这将创建一个文件,您无需进行任何解析,一切都会好起来的。

它将与 exe 文件分开,但除非您的意思是“一个文件”包含可执行文件并动态重写它,否则它应该很容易符合您的描述。

例如,让我们构建一个控制台应用程序,它只记得它被启动了多少次:

    创建一个新的控制台应用程序项目 转到属性页面,然后单击“设置”选项卡。 点击链接创建设置文件 在表格中键入以创建名为“LaunchCount”的int 类型的设置。使其成为用户范围或应用程序范围,具体取决于您是希望它在每个用户还是系统范围内持久化。 按 Ctrl-S 保存。

    在 Program.cs 的 Main 方法中,编写如下代码:

    Settings settings = Settings.Default;
    settings.LaunchCount++;
    Console.WriteLine("Launch count: 0", settings.LaunchCount);
    settings.Save();
    

    Settings 添加适当的using 指令(将光标放在设置中并按Ctrl-。)

    多次运行应用程序,观察数量增加。

【讨论】:

不,我的意思只是可执行文件。我正在将此应用程序直接部署到用户桌面并减少混乱,我只想拥有一件事来使其简单易用。我只想能够更改加载的默认 url,而不必在需要更改时更改实际应用程序。这是一种构建一次,永远不必修复错误的应用程序,因为它实际上只是一个网络浏览器和 3 个按钮。 @cferbs:目前还不清楚谁将在这里改变事情。您会更改 URL 并重建 exe,然后重新分发它吗?还是每个用户都会运行这个“管理面板”?请注意,使用我上面描述的方法,用户不必自己处理设置文件。对于用户和开发人员来说,它简单易行。你在哪里看到事情变得复杂或困难?即时重写 exe 是 认为复杂的...... “构建一次,永远不必修复错误”。哈。哈哈哈。 如果我们更改运行 Web 应用程序的服务器,用户将更改运行管理面板并更改默认 URL。我们这样做几乎没有它的参与,所以没有 dns 帮助,只有 ip 地址,他们将在我们无法安装东西的终端服务器上运行它,所以我只想拥有 exe,如果我们需要进行更改必须重新部署 exe,只需让经理更改 url。但是如果我必须在文件中使用内置设置,那我猜就可以了。 @cferbs:嗯,内置的方法似乎既简单又容易,所以我会这样做...至少在您的环境中尝试 ,大约需要 5 分钟。【参考方案2】:

如果没有单独的文件,您就无法保存设置……安全。您必须有一个单独的文件,这是标准和建议的方法,例如使用应用程序设置创建的文件,或者您必须使用注册表之类的东西来保存设置。

但请记住,出于安全原因,强烈建议不要使用注册表。另外,大多数公司无论如何都不允许访问注册表,这意味着没有此访问权限的任何人都无法使用设置功能。

【讨论】:

【参考方案3】:

有几种方法可以做到这一点。您可以使用命令行参数来执行此操作。从 shell 启动应用程序并输入您的命令行参数并更改它的启动方式。

一种 UNIX-y 方法是查看 exe 的名称并根据该名称更改行为。如果我没记错的话,rsh 和 rlogin 是同一个可执行文件——它们只是查看 argv[0] 来决定如何运行。在 Windows 中,这是直截了当的 - 查看 System.Environment.GetCommandLineArgs - 如果其中的第 0 个元素中有一个非空字符串,它将是您的可执行文件名称。

对于持久设置,see Jon Skeet's answer.

【讨论】:

【参考方案4】:

我不得不说这通常是一个坏主意,但我很久以前在 VB6 中已经这样做了。我在 exe 中创建了一个资源,然后(以某种方式)直接操作它。

问题是,这在 .NET 框架中通常是不可能的,因为它是驻留内存的。这些人在 .net 中进行了尝试,最终他们在 IL 中创建了一个程序来完成繁重的工作......Modify Emdeded String in C# compiled exe

按照 Jon 的建议使用设置文件!

【讨论】:

以上是关于具有可变设置的单个 exe的主要内容,如果未能解决你的问题,请参考以下文章

将具有多个属性的可变数组保存到 plist

如何获得具有可变步数的可枚举范围

如何在具有可变宽度 Unicode 字符的 Swift 字符串上使用 NSRegularExpression?

小册子R中的可变标记尺寸特征

在引导程序中具有可变高度的粘性页脚

打开具有可变宽度的关闭侧菜单(在 xcode 中)