Skip to content

Commit ea9c564

Browse files
author
Rean Fei
committed
Change dependency to windows-registry
1 parent 605b3c4 commit ea9c564

File tree

7 files changed

+359
-238
lines changed

7 files changed

+359
-238
lines changed

Cargo.lock

+21-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

+7-2
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,9 @@ zstd = "0.13"
9696

9797
[target."cfg(windows)".dependencies]
9898
cc = "1"
99-
winreg = "0.52"
99+
#winreg = "0.52"
100+
windows-registry = "0.1.2"
101+
windows-result = "0.1.2"
100102

101103
[target."cfg(windows)".dependencies.windows-sys]
102104
features = [
@@ -143,7 +145,10 @@ proptest = "1.1.0"
143145
tempfile = "3.8"
144146
termcolor = "1.2"
145147
thiserror = "1.0"
146-
tokio = { version = "1.26.0", default-features = false, features = ["macros", "rt-multi-thread"] }
148+
tokio = { version = "1.26.0", default-features = false, features = [
149+
"macros",
150+
"rt-multi-thread",
151+
] }
147152
tokio-retry = { version = "0.3.0" }
148153
tokio-stream = { version = "0.1.14" }
149154
tracing = "0.1"

src/cli/self_update/test.rs

+24-21
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,15 @@
33
use std::{io, sync::Mutex};
44

55
#[cfg(windows)]
6-
use winreg::{
7-
enums::{HKEY_CURRENT_USER, KEY_READ, KEY_WRITE},
8-
RegKey, RegValue,
9-
};
6+
// use winreg::{
7+
// enums::{HKEY_CURRENT_USER, KEY_READ, KEY_WRITE},
8+
// RegKey, RegValue,
9+
// };
10+
use windows_registry::{Key, CURRENT_USER};
11+
#[cfg(windows)]
12+
use windows_result::HRESULT;
13+
#[cfg(windows)]
14+
use windows_sys::Win32::Foundation::ERROR_FILE_NOT_FOUND;
1015

1116
/// Support testing of code that mutates global state
1217
pub fn with_saved_global_state<S>(
@@ -28,7 +33,7 @@ pub fn with_saved_global_state<S>(
2833

2934
#[cfg(windows)]
3035
pub fn with_saved_path(f: &mut dyn FnMut()) {
31-
with_saved_reg_value(&RegKey::predef(HKEY_CURRENT_USER), "Environment", "PATH", f)
36+
with_saved_reg_string(CURRENT_USER, "Environment", "PATH", f)
3237
}
3338

3439
#[cfg(unix)]
@@ -37,37 +42,35 @@ pub fn with_saved_path(f: &mut dyn FnMut()) {
3742
}
3843

3944
#[cfg(windows)]
40-
pub fn get_path() -> io::Result<Option<RegValue>> {
41-
get_reg_value(&RegKey::predef(HKEY_CURRENT_USER), "Environment", "PATH")
45+
pub fn get_path() -> io::Result<Option<String>> {
46+
get_reg_string(CURRENT_USER, "Environment", "PATH")
4247
}
4348

4449
#[cfg(windows)]
45-
pub fn with_saved_reg_value(root: &RegKey, subkey: &str, name: &str, f: &mut dyn FnMut()) {
50+
pub fn with_saved_reg_string(root: &Key, subkey: &str, name: &str, f: &mut dyn FnMut()) {
4651
with_saved_global_state(
47-
|| get_reg_value(root, subkey, name),
48-
|p| restore_reg_value(root, subkey, name, p),
52+
|| get_reg_string(root, subkey, name),
53+
|p| restore_reg_string(root, subkey, name, p),
4954
f,
5055
)
5156
}
5257

5358
#[cfg(windows)]
54-
fn get_reg_value(root: &RegKey, subkey: &str, name: &str) -> io::Result<Option<RegValue>> {
55-
let subkey = root.open_subkey_with_flags(subkey, KEY_READ | KEY_WRITE)?;
56-
match subkey.get_raw_value(name) {
59+
fn get_reg_string(root: &Key, subkey: &str, name: &str) -> io::Result<Option<String>> {
60+
let subkey = root.create(subkey)?;
61+
match subkey.get_string(name) {
5762
Ok(val) => Ok(Some(val)),
58-
Err(ref e) if e.kind() == io::ErrorKind::NotFound => Ok(None),
59-
Err(e) => Err(e),
63+
Err(ref e) if e.code() == HRESULT::from_win32(ERROR_FILE_NOT_FOUND) => Ok(None),
64+
Err(e) => Err(e.into()),
6065
}
6166
}
6267

6368
#[cfg(windows)]
64-
fn restore_reg_value(root: &RegKey, subkey: &str, name: &str, p: Option<RegValue>) {
65-
let subkey = root
66-
.open_subkey_with_flags(subkey, KEY_READ | KEY_WRITE)
67-
.unwrap();
69+
fn restore_reg_string(root: &Key, subkey: &str, name: &str, p: Option<String>) {
70+
let subkey = root.create(subkey).unwrap();
6871
if let Some(p) = p.as_ref() {
69-
subkey.set_raw_value(name, p).unwrap();
72+
subkey.set_string(name, p).unwrap();
7073
} else {
71-
let _ = subkey.delete_value(name);
74+
let _ = subkey.remove_value(name);
7275
}
7376
}

0 commit comments

Comments
 (0)