在Windows Studio安装程序中使用Windows环境变量作为注册表值

Mar*_*ser 8 registry installer environment-variables visual-studio

嘿,我想使用Windows环境变量作为注册表项的值.不幸的是我不能简单地写出类似的东西%systemroot%\system32\MyScreensaver.scr.

你可以猜到,我想将一些reg值指向我自己的应用程序,例如自动启动和屏幕保护程序以及其他一些东西.

有任何想法吗?

Ric*_*key 8

Windows注册表本身支持REG_EXPAND_SZ注册表值类型.

只需使用REG_EXPAND_SZ而不是REG_SZ在想要在注册表键值中嵌入环境变量时使用.

以下是访问a的C#代码示例,REG_EXPAND_SZ并自动处理扩展:

var registry = Registry.CurrentUser.OpenSubKey("Environment");
var temp = registry.GetValue("TEMP") as string;
Run Code Online (Sandbox Code Playgroud)

以下是创建可扩展注册表值的示例:

registry.SetValue("TEMP", @"%USERPROFILE%\AppData\Local\Temp", RegistryValueKind.ExpandString);
Run Code Online (Sandbox Code Playgroud)

其他平台或脚本语言有其他机制来支持这一点.这是Win32的低级描述REG_EXPAND_SZ:


Cos*_*rvu 5

您可以使用Windows Installer 格式化的类型.例如,您的注册表值可以是:

[%SystemRoot]\system32\MyScreensaver.scr
Run Code Online (Sandbox Code Playgroud)

这样,Windows Installer将在安装期间自动解析环境变量.