如何将参数传递给从网上下载的exe?

时间:2010-12-13 13:04:21

标签: url parameters parameter-passing exe

我有.Net桌面应用程序,用户可以从我的网站下载。我想根据用户自定义此应用。 有没有办法在下载之前修改exe,只是为了改变用户下载的几个字符串? 或者可以通过URL将命令行参数传递给此exe?

4 个答案:

答案 0 :(得分:1)

  

.exe file需要自定义,以便在某些下载时表现不同。

跳过下面找到我认为可以容忍的解决方案。

将部分添加到.EXE文件 - 不理想。

.exe文件有一个接一个的部分。您可以在其中添加包含数据的部分,然后可执行文件将读取该部分。这要求您修改(有权访问)可执行文件的源代码,以便对数据执行任何有意义的操作。熟悉.exe文件格式并在Web服务器端进行修改以及在程序源代码中使用它也有点乏味。

更改.EXE文件的资源部分 - 不理想。

专用的资源" section存在于可执行文件中。您可以向其添加自定义字符串或blob数据。与第一个相同的缺点。

在.EXE中的固定位置覆盖数据 - Passable。

让可执行文件从文件中的固定位置读取数据,在提供.exe文件时会被自定义数据覆盖。需要修改可执行文件的源代码。

将数据附加到.EXE - Passable。

将数据附加到可执行文件。再一次,阅读它并对它做任何特殊事情都需要可执行文件本身。

☑将.EXE包装在另一个.EXE中并将数据追加到它 - 可容忍。

创建一个程序,将原始可执行文件和自定义数据附加到该程序。然后,当执行此自定义程序时,它将提取嵌入的可执行文件并使用自定义数据作为参数启动它。

这种捆绑可执行文件在大多数服务器端(脚本)语言中也很容易生成。当请求下载时,服务器发送wrapper-exe,原始exe,自定义数据,当然还有一些静态大小的数据字段,表示这两个数据块的大小,以便提取它们。

缺点:需要创建这样的包装程序,除非有人已经拥有。

相关链接:
1. Best practices to let my web users download custom .exe from my site using PHP
2. Modifying executable upon download (Like Ninite)

答案 1 :(得分:0)

不是那样,不。

然而,您可以使用每个用户的自定义app.config文件自动压缩(在您的服务器上)您的exe。

<强>更新

将您的下载位置指向一个自定义的HttpHandler,它将您的exe(使用http://www.sharpdevelop.net/OpenSource/SharpZipLib/)与生成的(对于当前用户)应用程序配置文件(http://generally.wordpress.com/2007/09/27/using-appconfig-for-user-defined-runtime-parameters/)压缩在一起。

然后,用户将两个文件(MyApp.exe和MyApp.exe.config)解压缩到任意位置并运行MyApp.exe。

如果您有安装程序,则此方法无效。

答案 2 :(得分:0)

如果应用程序是ClickOnce部署的,则在ClickOnce选项对话框中传递URL参数是一个选项。但是,我还没有使用过这个功能。

修改
您可能希望根据实际运行应用程序的用户更改配置中的某些用户设置。您还可以通过在初始初始化后添加设置为SettingsNeedUpdate的相应true设置,确保每个用户只执行一次。

例:
添加新设置“Option1”,“Option2”和“SettingsNeedUpdate”,这些是用户设置。在Main中,您可以添加以下内容:

...
try
{
    if (Properties.Settings.Default.SettingsNeedUpdate)
    {
        Properties.Settings.Default.Option1 = ...;
        Properties.Settings.Default.Option2 = ...;
        Properties.Settings.Default.SettingsNeedUpdate = false;
        Properties.Settings.Default.Save();
    }
}
catch (Exception exp)
{
    ...
}

...

答案 3 :(得分:0)

您可以编写一个可以修改程序集资源的库(此处为字符串表)。 这个库可以从反射中受益。

当用户询问您的文件时,asp.net页面可以自定义exe(使用您的库)并将其发送给客户端。