在我们的产品中,需要确定当前用户登录 Windows(特别是 Vista)的时间。似乎没有直接的 API 函数可以实现这一点,而且我找不到与 WMI 相关的任何内容(尽管我不是 WMI 专家,所以我可能错过了一些东西)。
有任何想法吗?
我们正在开发的产品允许用户轻松将其设置为在计算机启动时自动运行.这很有用,因为该产品是大多数用户基本工作环境的一部分.
这个功能不久前实现了一段时间,一切都很好,但是当我们开始在Vista上测试这个功能时,产品在启动时开始表现得非常奇怪.具体来说,我们的产品使用另一种产品(称之为X),只要它需要服务就会启动.实际问题是,只要在登录后立即启动X,它就会崩溃或报告与磁盘访问相关的严重错误(即使直接启动X而不是通过我们的产品,也会发生这种情况).
每当我们通过在注册表中的"运行"键中注册它来运行我们的产品或在" 开始菜单 " 内的" 启动 "文件夹中放置它的快捷方式时就会发生这种情况,即使我们实际延迟了大约20秒开始跑步 当我们将延迟改为70秒时,一切都很顺利.
我们尝试通过在登录后立即手动启动我们的产品(通过双击桌面上的快捷方式)来重现问题,但无济于事.
现在,登录后一分钟正常运行的应用程序如何在登录后立即启动时报告此类硬错误?
我正在编写使用Windows IP Helper API的C#代码.我试图调用的函数之一是" GetBestInterface ",它采用IP的"uint"表示.我需要的是解析IP的文本表示以创建'uint'表示.
我已经通过谷歌找到了一些例子,比如这个或者这个例子,但我很确定应该有一种标准的方法来实现这一点.唯一的问题是,我找不到这种标准方式.IPAddress.Parse似乎是在正确的方向,但它没有提供任何方式获得'uint'表示...
还有一种方法可以使用IP Helper,使用ParseNetworkString,但同样,我宁愿使用.NET - 我相信我越少依赖pInvoke就越好.
那么,有谁知道在.NET中执行此操作的标准方法?
考虑以下设置:一台带有 LAN 接口和 WiFi 接口(任何新笔记本电脑的标准)的 Windows PC。每个接口都可能与网络连接或断开。我需要一种方法来确定哪个适配器连接到互联网 - 具体来说,如果它们都连接到不同的网络,一个连接到互联网,一个没有连接到互联网。
我当前的解决方案涉及使用IPHelper的“ GetBestInterface ”函数并为其提供IP地址“0.0.0.0”。
对于这个问题,您还有其他建议的解决方案吗?
根据一些答案,让我详细说明:
@Chris Upchurch:这让我依赖于 google.com 的启动(通常不是问题)以及任何可能安装的允许 ping 的个人防火墙。
@Till:就像 Steve Moon 所说,依赖适配器的地址是有风险的,因为你对内部网络设置做了很多假设。
@Steve Moon:查看路由表听起来是个好主意,但我不是自己应用路由逻辑,而是尝试使用如上所述的“GetBestInterface”。我相信它应该做的正是您在答案中概述的内容,但我不太确定。我不愿意实现自己的“路由逻辑”的原因是,与使用由更多“硬核”网络人员编写和测试的库/API相比,我出错的可能性更大。
使用Assembly.LoadFrom和Assembly.Load混合加载程序集时的奇怪行为
使用Assembly.LoadFrom以及稍后使用Assembly.Load加载程序集时,我遇到了一种奇怪的行为.
我正在使用Assembly.LoadFrom加载程序集,其中程序集位于不是执行文件夹的文件夹中.
稍后在我的测试代码中,当我尝试使用Assembly.Load再次加载此程序集时,加载失败并出现System.IO.FileNotFoundException("无法加载文件或程序集......"),尽管程序集已经加载.使用强名称和非强名称加载失败(再次加载此装配的原始原因是使用BinaryFormatter).
但是,如果程序集位于执行文件夹中,则后两次加载在两种情况下都会成功,具有强名称和非强名称.在这种情况下,您可以看到两个相同的装配从两个不同的位置加载.
一个重新创建此问题的简单代码示例 -
程序集assembly1 = Assembly.LoadFrom(@"C:\ a.dll");
//使用强名称加载失败程序集assembly2 = Assembly.Load(@"a,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = 14986c3f172d1c2c");
//也加载非强大的失败程序集assembly3 = Assembly.Load(@"a");
谢谢.
我有一组重复的项目,我想创建一个HashMap以项目为键的项目,以及它们在原始集合中出现的次数。
我正在处理的具体示例是一个字符串,我想计算每个字符出现的次数。
我可以做这样的事情:
fn into_character_map(word: &str) -> HashMap<char, i32> {
let mut characters = HashMap::new();
for c in word.chars() {
let entry = characters.entry(c).or_insert(0);
*entry += 1;
}
characters
}
Run Code Online (Sandbox Code Playgroud)
但我想知道是否有更优雅的解决方案。我正在考虑使用collect(),但它不维护项目之间的状态,所以似乎不支持我需要的东西。
这是在我为Exercism 上的“字谜”问题编写解决方案时出现的。
.net ×2
iphelper ×2
networking ×2
windows ×2
assemblies ×1
c# ×1
rust ×1
virtual-pc ×1
winapi ×1