[][src]Struct winres::WindowsResource

pub struct WindowsResource { /* fields omitted */ }

Methods

impl WindowsResource[src]

pub fn new() -> Self[src]

Create a new resource with version info struct

We initialize the resource file with values provided by cargo

Field Cargo / Values
"FileVersion" package.version
"ProductVersion" package.version
"ProductName" package.name
"FileDescription" package.description

Furthermore if a section package.metadata.winres exists in Cargo.toml it will be parsed. Values in this section take precedence over the values provided natively by cargo. Only the string table of the version struct can be set this way. Additionally, the language field is set to neutral (i.e. 0) and no icon is set. These settings have to be done programmatically.

Cargo.toml files have to be written in UTF-8, so we support all valid UTF-8 strings provided.

#Cargo.toml
[package.metadata.winres]
OriginalFilename = "testing.exe"
FileDescription = "⛄❤☕"
LegalCopyright = "Copyright © 2016"

The version info struct is set to some values sensible for creating an executable file.

Property Cargo / Values
FILEVERSION package.version
PRODUCTVERSION package.version
FILEOS VOS_NT_WINDOWS32 (0x40004)
FILETYPE VFT_APP (0x1)
FILESUBTYPE VFT2_UNKNOWN (0x0)
FILEFLAGSMASK VS_FFI_FILEFLAGSMASK (0x3F)
FILEFLAGS 0x0

pub fn set<'a>(&mut self, name: &'a str, value: &'a str) -> &mut Self[src]

Set string properties of the version info struct.

Possible field names are:

  • "FileVersion"
  • "FileDescription"
  • "ProductVersion"
  • "ProductName"
  • "OriginalFilename"
  • "LegalCopyright"
  • "LegalTrademark"
  • "CompanyName"
  • "Comments"
  • "InternalName"

Additionally there exists "PrivateBuild", "SpecialBuild" which should only be set, when the FILEFLAGS property is set to VS_FF_PRIVATEBUILD(0x08) or VS_FF_SPECIALBUILD(0x20)

It is possible to use arbirtrary field names but Windows Explorer and other tools might not show them.

pub fn set_toolkit_path<'a>(&mut self, path: &'a str) -> &mut Self[src]

Set the correct path for the toolkit.

For the GNU toolkit this has to be the path where MinGW put windres.exe and ar.exe. This could be something like: "C:\Program Files\mingw-w64\x86_64-5.3.0-win32-seh-rt_v4-rev0\mingw64\bin"

For MSVC the Windows SDK has to be installed. It comes with the resource compiler rc.exe. This should be set to the root directory of the Windows SDK, e.g., "C:\Program Files (x86)\Windows Kits\10" or, if multiple 10 versions are installed, set it directly to the corret bin directory "C:\Program Files (x86)\Windows Kits\10\bin\10.0.14393.0\x64"

If it is left unset, it will look up a path in the registry, i.e. HKLM\SOFTWARE\Microsoft\Windows Kits\Installed Roots

pub fn set_language(&mut self, language: u16) -> &mut Self[src]

Set the user interface language of the file

Example

extern crate winapi;
extern crate winres;
fn main() {
  if cfg!(target_os = "windows") {
    let mut res = winres::WindowsResource::new();
    res.set_language(winapi::um::winnt::MAKELANGID(
        winapi::um::winnt::LANG_ENGLISH,
        winapi::um::winnt::SUBLANG_ENGLISH_US
    ));
    res.compile().unwrap();
  }
}

For possible values look at the winapi::um::winnt constants, specifically those starting with LANG_ and SUBLANG_.

Table

Sometimes it is just simpler to specify the numeric constant directly (That is what most .rc files do). For possible values take a look at the MSDN page for resource files; we only listed some values here.

Language Value
Neutral 0x0000
English 0x0009
English (US) 0x0409
English (GB) 0x0809
German 0x0407
German (AT) 0x0c07
French 0x000c
French (FR) 0x040c
Catalan 0x0003
Basque 0x042d
Breton 0x007e
Scottish Gaelic 0x0091
Romansch 0x0017

pub fn set_icon<'a>(&mut self, path: &'a str) -> &mut Self[src]

Set an icon filename

This icon need to be in ico format. The filename can be absolute or relative to the projects root.

pub fn set_icon_with_id<'a>(
    &mut self,
    path: &'a str,
    icon_id: &'a str
) -> &mut Self
[src]

Set an icon filename and icon id

This icon need to be in ico format. The filename can be absolute or relative to the projects root.

pub fn set_version_info(&mut self, field: VersionInfo, value: u64) -> &mut Self[src]

Set a version info struct property Currently we only support numeric values; you have to look them up.

pub fn set_manifest<'a>(&mut self, manifest: &'a str) -> &mut Self[src]

Set the embedded manifest file

Example

The following manifest will brand the exe as requesting administrator privileges. Thus, everytime it is executed, a Windows UAC dialog will appear.

let mut res = winres::WindowsResource::new();
res.set_manifest(r#"
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
    <security>
        <requestedPrivileges>
            <requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
        </requestedPrivileges>
    </security>
</trustInfo>
</assembly>
"#);

pub fn set_manifest_file<'a>(&mut self, file: &'a str) -> &mut Self[src]

Some as set_manifest() but a filename can be provided and file is included by the resource compieler itself. This method works the same way as set_icon()

pub fn write_resource_file<P: AsRef<Path>>(&self, path: P) -> Result<()>[src]

Write a resource file with the set values

pub fn set_resource_file<'a>(&mut self, path: &'a str) -> &mut Self[src]

Set a path to an already existing resource file.

We will neither modify this file nor parse its contents. This function simply replaces the internaly generated resource file that is passed to the compiler. You can use this function to write a resource file yourself.

pub fn set_output_directory<'a>(&mut self, path: &'a str) -> &mut Self[src]

Override the output directoy.

As a default, we use %OUT_DIR% set by cargo, but it may be necessary to override the the setting.

pub fn compile(&self) -> Result<()>[src]

Run the resource compiler

This function generates a resource file from the settings or uses an existing resource file and passes it to the resource compiler of your toolkit.

Further more we will print the correct statements for cargo:rustc-link-lib= and cargo:rustc-link-search on the console, so that the cargo build script can link the compiled resource file.

Trait Implementations

impl Debug for WindowsResource[src]

Auto Trait Implementations

Blanket Implementations

impl<T, U> Into for T where
    U: From<T>, 
[src]

impl<T> From for T[src]

impl<T, U> TryFrom for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

impl<T> Borrow for T where
    T: ?Sized
[src]

impl<T> Any for T where
    T: 'static + ?Sized
[src]

impl<T> BorrowMut for T where
    T: ?Sized
[src]

impl<T, U> TryInto for T where
    U: TryFrom<T>, 
[src]

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.