mirror of https://github.com/ospab/ostp.git
50 lines
1.8 KiB
Rust
50 lines
1.8 KiB
Rust
#![allow(unused_imports)]
|
|
use anyhow::Result;
|
|
#[cfg(target_os = "windows")]
|
|
use anyhow::anyhow;
|
|
use std::path::PathBuf;
|
|
|
|
#[cfg(target_os = "windows")]
|
|
pub fn download_wintun_dll(debug: bool) -> Result<()> {
|
|
let exe = std::env::current_exe()?;
|
|
let dir = exe.parent().ok_or_else(|| anyhow!("failed to get binary directory"))?;
|
|
let dll_path = dir.join("wintun.dll");
|
|
|
|
if !dll_path.exists() {
|
|
if debug {
|
|
println!("[ostp-client] wintun.dll not found. Downloading automatically...");
|
|
}
|
|
|
|
let zip_path = dir.join("wintun.zip").to_string_lossy().replace('\\', "/");
|
|
let temp_path = dir.join("wintun_temp").to_string_lossy().replace('\\', "/");
|
|
let dll_dest = dll_path.to_string_lossy().replace('\\', "/");
|
|
|
|
let ps_script = format!(
|
|
"Invoke-WebRequest -Uri 'https://www.wintun.net/builds/wintun-0.14.1.zip' -OutFile '{}' -ErrorAction Stop; \
|
|
Expand-Archive -Path '{}' -DestinationPath '{}' -Force; \
|
|
Get-ChildItem -Path '{}' -Filter 'wintun.dll' -Recurse | Copy-Item -Destination '{}' -Force; \
|
|
Remove-Item '{}', '{}' -Recurse -Force",
|
|
zip_path, zip_path, temp_path, temp_path, dll_dest, zip_path, temp_path
|
|
);
|
|
|
|
let output = std::process::Command::new("powershell")
|
|
.args(["-Command", &ps_script])
|
|
.current_dir(dir)
|
|
.output()?;
|
|
|
|
if !output.status.success() {
|
|
let stderr = String::from_utf8_lossy(&output.stderr);
|
|
return Err(anyhow!("Failed to download wintun.dll: {stderr}"));
|
|
}
|
|
if debug {
|
|
println!("[ostp-client] wintun.dll downloaded and installed successfully!");
|
|
}
|
|
}
|
|
Ok(())
|
|
}
|
|
|
|
#[cfg(not(target_os = "windows"))]
|
|
pub fn download_wintun_dll(_debug: bool) -> Result<()> {
|
|
Ok(())
|
|
}
|