【问题标题】:How can I obtain access to a networked location?如何获得对联网位置的访问权限?
【发布时间】:2022-06-15 21:09:45
【问题描述】:

我的程序在系统启动时无法访问联网位置:

fn main() {
    ensure_network("\\\\SERVER\\".to_string());
}

fn ensure_network(network_dir: String) {
    let timer = std::time::Instant::now();
    let mut prev_counter = 0;
    loop {
        if std::fs::read_dir(&network_dir).is_ok() {
            break;
        }
        if timer.elapsed().as_secs() > prev_counter + 60 {
            println!("Still Failing.");
            prev_counter = timer.elapsed().as_secs();
        }
        std::hint::spin_loop();
    }
    println!("Network access obtained (Time elapsed: {})",timer.elapsed().as_secs_f32());
}

此程序应启动并等待网络连接。但是,它永远找不到联网的位置。但是,如果我启动此应用程序的另一个实例,如果连接已经建立,它将起作用。更进一步,第二个实例似乎使原始实例也能正常工作。第一个实例没有建立连接的原因是它与 PC 一起启动。

我尝试在开头添加暂停,如您所见,它有一个应该重新检查的循环。但是,这个程序一遍又一遍地失败。我已经记录了一个小时的尝试,但没有成功。网络本身会自动连接。我在运行第二个实例之前“建立”连接的方式是简单地通过文件浏览器访问网络上的文件或桌面上的直接链接。我什至尝试过启动net use,但它根本无法到达该位置。

编辑:此程序使用任务计划程序和“以最高权限运行”选项启动。我发现如果程序失败,以管理员身份手动启动 任何 应用程序将导致该应用程序开始工作。我还发现禁用“以最高权限运行”也会导致程序运行。然而,问题在于程序不再具有访问文件所需的权限。

【问题讨论】:

  • 如果您启动第二个实例之前没有访问网络共享会发生什么?
  • 我现在对此进行了测试,第二个实例正常工作,而第一个实例继续失败。
  • 有一个类似的问题(在 glibc 中也已修复):github.com/rust-lang/rust/issues/41570 可能你可以看看这个问题是否与某种相关
  • @stepan 这非常相似。但是,我在上面的edit 2 中添加了一些奇怪的信息。它似乎比锈更深,只是无法连接。它在不是管理员时有效,并且在管理员被授予任何外部应用程序时有效。 (见编辑)

标签: windows networking rust


猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-09-16
  • 2013-05-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多