How can I inject a file into an EXE at runtime and reference the file during program operation?

纵然是瞬间 提交于 2019-12-03 13:26:53

问题


I'd like a user to download an exe from my website, where (synchronously upon download) an XML file is injected into this application. This XML file contains a public key, and a signature.

How do I inject the file prior to downloading and reference it later during execution?

Ideally I won't be using a shell to inject the file, rather a native .NET api.


回答1:


You could that easily with Mono.Cecil, you'd just have to write something like:

var module = ModuleDefinition.ReadModule ("Application.exe");

module.Resources.Add (
    new EmbeddedResource (
        "signature.xml",
        ManifestResourceAttributes.Private, 
        File.ReadAllBytes ("signature.xml")));

module.Write ("Application.exe",
    new WriterParameters {
        StrongNameKeyPair = new StrongNameKeyPair ("keypair.snk")
});

To inject the signature.xml resource from the signature.xml file, and sign back your assembly with your keypair.snk that you used to sign Application.exe.

And at runtime, you'd just have to use:

var stream = Assembly.GetExecutingAssembly ()
    .GetManifestResourceStream ("signature.xml");

To retrieve the resource.




回答2:


To inject the file add it to your project. Then right-click on it in the solution explorer, go to properties, and change its type to EmbeddedResource.

To load it at run-time use Assembly.GetManifestResourceStream(). Read more here: http://msdn.microsoft.com/en-us/library/xc4235zt.aspx.




回答3:


From what he writes it seems he's gonna dynamically change the file prior to download. This really depends on the server-side language you use, And how much control you have over your server/hosting provider account.
Say you have a download.aspx file which generates this exe files and sends for download. One thing you can do is to put the assembly's source on your server then download.aspx assembles it and send it for download. (The difficult way)
Another way is to put the compiled assembly on server then use e.g cecil ( Programmically embed resources in a .NET assembly ) or whatever to change it then send it for download.




回答4:


This google result seems promising.




回答5:


Add the file to your project, typically something along the lines of:

+solution
  +project
    +Resources
      +SomeDirectory
        -SomeFile

Then go to your project's properties, go to the resources tab on the left site and select the files resource on the top nav bar. Select to add a resource > add existing file. Browse to the file you just put into your project and select to add it.

The file will now show up under your Resources tab of your project's properties. Change the name of your file in the Resources tab to be more meaningful.

The file is now an embedded resource of your project and you can access it by the following in code:

var MyFile = Properties.Resources.MyFile


来源:https://stackoverflow.com/questions/5340689/how-can-i-inject-a-file-into-an-exe-at-runtime-and-reference-the-file-during-pro

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!