-
Notifications
You must be signed in to change notification settings - Fork 12.9k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Need to re-fix Windows manifest embedding. #11207
Comments
So that's why I haven't been able to use gdb recently! That also explains why a recent attempt at Sounds like we may need to revert the manifest embedding for now? |
@alexcrichton: Yes, probably. |
Regarding fixing this, I see a few approaches:
Currently we have no need to alter .exe manifests, and if really needed this can always be done afterwards using windres tool, so I am leaning towards option 2. |
Do you know the format of the COFF file? LLVM certainly has the ability to write a COFF file, and we might be able to just use their bindings to emit our own COFF file ourselves. They seem to have lots and lots of header files and defines related to COFF object files, so seems promising? Of the options, using LLVM to generate an object and then passing that to the linker sounds the most appealing to me. |
COFF format is well-documented, but yes, it's complicated. Regarding LLVM: as far as I know, it is not possible to create PE COFF resource section even in native assembly, much less in LL code. I actually investigated this approach, but ran into inability to emit RVA offsets. Apparently this can only be done by writing .obj file directly. |
In view of the problems outlined in #11207, I think manifest embedding should be removed, until we find a better solution. :-(
As an additional option, could a combination of options 1 and 2 work? Ship a default compiled resource file with rustc, but allow it to be overriden by the user if he wants to. (In which case he must pay the "cost" of requiring windres for that to work.) |
FWIW, UAP installer detection heuristics may be suppsessed by setting this environment variable: |
@vadimcn I'm not sure I ever really fully understood what manifests were or why we were embedding them, but given today's landscape of Rust-on-Windows does this still make sense? Is this something we should do on MSVC as well as MinGW? |
Manifests are just metadata about the executable that tells Windows more about its requirements and capabilities. One of the most frequent uses is to specify whether the program expects to run with admin privileges (otherwise Windows will try to guess - for compatibility with pre-Vista executables), but there other features beyond that. MSVC linker will embed a default manifest by, um, default. As for MinGW - see above. |
Ah ok, so in that case should is the MSVC manifest that's automatically embedded a well known manifest? If so then it sounds like this is still relevant for MinGW and it'd just be one of the strategies you outlined above. |
As a note - rustup-setup was just renamed rustup-init because of this issue. |
Triage: not aware of any changes here |
I suggest closing this in favor of rust-lang/rfcs#721 and the |
@jonas-schievink can you please elaborate on the steps required to embed a manifest using the embed_resource crate? |
@jpoles1 I've never used it, but you can check the docs and crates that use it |
@jonas-schievink I read the docs and still unsure of how to embed the manifest. Are you aware of any crates that use the library in this manner? Understand if not, and thanks for your assistance. |
|
@jonas-schievink, that's perfect, thanks for the tip! My specific use case was to programatically enable admin permissions on my .exe file, the steps I used to get this working are as follows:
|
Great! Let's close in favor of those. |
[`needless_pass_by_ref_mut`]: Do not lint if passed as a fn-like argument Fixes rust-lang#11182 and also fixes rust-lang#11199 (though this is kind of a duplicate) There's likely a case or two I've missed, so this likely needs a bit more work but it seems to work fine with the tests I've added. PS, the diff for the test is useless because it iterates over a hashmap before linting. Seems to work fine but we could maybe change this for consistency's sake changelog: [`needless_pass_by_ref_mut`]: No longer lints if the function is passed as a fn-like argument
The previous attempt (#10878) to fix #10512 has a couple of problems:
The text was updated successfully, but these errors were encountered: