小编use*_*541的帖子

实现不应调用的派生方法的最佳实践

我有一个JAVA类A,它有一个方法foo

abstract class A {
  abstract void foo();
}
Run Code Online (Sandbox Code Playgroud)

我还有一个派生类A - MutableA.MutableA是一个单例对象,表示不需要更新,这对重用代码流很有用.永远不应该在MutableA上调用foo().实现这一目标的最佳方法是什么:

  1. 抛出不支持的异常
  2. 什么都不做(空实现)
  3. 这是一个糟糕的设计.

有人可以推荐我这种情况下的最佳做法是什么?

java inheritance object-oriented-analysis

8
推荐指数
1
解决办法
340
查看次数

如何按卷ID获取驱动器信息

我有一个带有卷id的txt文件.

我需要从驱动器卷ID(Windows)获取驱动器信息(驱动器号,驱动器大小等):

卷ID采用以下格式:

\\?\Volume{XXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}
Run Code Online (Sandbox Code Playgroud)

驱动器可以是可移动/本地磁盘

检索信息无关紧要(可能是脚本,cpp,c#,java代码).

编辑:

我试图用DriveInfo,的Win32_LogicalDisk,Win32_Volume,Win32_PnpDevices - 但我找不到这个奇怪的ID ......在所有情况下的ID有differrent格式

更新:

找到了怎么做.

你可以像这样枚举Win32_Volume:

ManagementObjectSearcher ms = new ManagementObjectSearcher("Select * from Win32_Volume");    
foreach(ManagementObject mo in ms.Get())   
{
    var guid = mo["DeviceID"].ToString();

    if(guid == myGuid)
        return mo["DriveLetter"];
}
Run Code Online (Sandbox Code Playgroud)

c# c++ drive driveinfo

7
推荐指数
1
解决办法
1万
查看次数

冒充用户

我们正在开发一个C#.NET Windows服务.

我们的服务在系统帐户下运行,我们正在尝试模拟登录用户USER.模拟工作正常,即在System.Security.Principal.WindowsIdentity.GetCurrent()模仿后调用时,我们会得到正确的用户'USER'.

问题是,当我们尝试访问用户配置文件时,我们无法获得预期的结果.一个例子是访问注册表CURRENT_USER.我们收到拒绝访问错误.当使用第三方函数时,我们假设它部分使用了注册表,我们获得了"真实"(模仿之前)用户的详细信息.此外,在呼叫时,Environment.ExpandEnvironmentVariables("%TEMP%")我们获取系统配置文件而不是登录用户配置文件.

有没有办法完全冒充不同的用户?我知道我们可以使用LoadUserProfile来获取特定的用户配置文件,但这对我们不利,因为我们正在运行使用当前用户配置文件的第三方dll.

我们的模拟代码就是基于

.net c# impersonation windows-services user-profile

7
推荐指数
1
解决办法
2522
查看次数

离线撤销模式

我的问题与这个问题类似.

我试图只使用本地CRL检查撤销列表.

我使用X509Chain.Build()与以下参数:

    var chainMachine = new X509Chain(true);
            chainMachine.ChainPolicy.RevocationFlag = X509RevocationFlag.EntireChain;
            chainMachine.ChainPolicy.UrlRetrievalTimeout = TimeSpan.FromSeconds(30);
            chainMachine.ChainPolicy.VerificationFlags = X509VerificationFlags.NoFlag;
            chainMachine.ChainPolicy.VerificationTime = DateTime.Now;
            chainMachine.ChainPolicy.RevocationMode = X509RevocationMode.Offline;
Run Code Online (Sandbox Code Playgroud)

但我得到以下错误:

  1. RevocationStatusUnknown =>撤销功能无法检查证书的吊销.
  2. OfflineRevocation =>撤销功能无法检查证书的吊销,因为吊销服务器处于脱机状态.

奇怪的是,一旦我尝试在线检查撤销列表(因此CRL将被更新),问题就解决了.所以它看起来一旦缓存中有任何东西,问题就不能再复制了.

我认为可能错误消息不正确,实际发生的是当缓存为空时会出现一些异常导致此消息弹出.另一个选择是,可能有一些标志说明缓存是否已经更新,如果它从未更新过,它会尝试从外部服务器获取信息

任何人都可以指出这个问题的原因是什么?

certificate-revocation x509certificate2

7
推荐指数
1
解决办法
3221
查看次数

当没有UAC弹出窗口时,无法检测用户是否使用提升的权限运行

我正在开发一个C#应用程序,需要检测用户是否以提升的管理员身份运行.我尝试了史蒂文建议的解决方案.

我在5台机器上检查了解决方案,它在4台机器上工作正常.

即使我将用户帐户控制设置为,也有一台机器永远不会显示UAC通知消息Always notify me.

检查该机器上的代码时,即使我选择了run as administrator它,它也不起作用,并且该方法IsProcessElevated返回false.

那台特定的机器有问题吗?

有没有办法在这种平台上确定用户是否升级?

.net c# uac

6
推荐指数
1
解决办法
3691
查看次数

如何格式化字符串列表

我有一个字符串列表,我想以相同的方式格式化每个字符串.例如myListOfStrings = str1,str2,str3,我的格式是(%s)我想要这样的东西:

String.format(" (%s) ", myListOfStrings)
Run Code Online (Sandbox Code Playgroud)

会输出

(str1)  (str2)  (str3)
Run Code Online (Sandbox Code Playgroud)

这样做有一种优雅的方式吗?或者我是否必须使用字符串生成器并对所有字符串执行foreach循环?

java list string-formatting

6
推荐指数
2
解决办法
2万
查看次数

Windows 8上的文件历史记录

我有一个与使用C#获取/设置"文件历史记录"(Windows 8)设置相关的问题

Windows提供了一个API 文件历史记录API,"允许应用程序读取和修改文件历史记录配置"

  1. 这个API有C#版本吗?
  2. 它需要.NET 4.5吗?
  3. 有没有关于如何使用此API的代码示例?

.net c# winapi windows-8

5
推荐指数
1
解决办法
810
查看次数

HKEY_USERS仅包含已登录的用户

我正在写一个c#应用程序.

作为我的应用程序的一部分,我需要阅读用户的个人资料.

为了获得所有用户,我正在使用Registry.Users.GetSubKey().

问题是在Windows 8上HKEY_USERS只包含登录用户!(当有2个用户登录时,我会看到2个用户HKEY_USERS,但是如果其中一个用户将退出,那么将只有1个用户HKEY_USERS)

因此,我只为登录用户获取配置文件.

我试图搜索整个注册表以找到数据保存的位置,但我无法在任何地方找到这些信息....当用户注销时,信息似乎消失了.

是设计还是错误?

保存数据的位置 - 它必须在注册表中,但我找不到它...

它可能是权限中的东西吗?也许信息存在但是当用户没有登录时它被隐藏了?是否有标志或我可以用来读取未登录用户的配置文件?

c# windows-8

5
推荐指数
2
解决办法
8766
查看次数

获取范围内的蓝牙设备

我正在为Windows桌面开发.我希望将设备放在范围内,然后将其显示为用户列表.

这是我正在使用的代码:

HBLUETOOTH_DEVICE_FIND founded_device;

BLUETOOTH_DEVICE_INFO device_info;
device_info.dwSize = sizeof(device_info);

BLUETOOTH_DEVICE_SEARCH_PARAMS search_criteria;
search_criteria.dwSize = sizeof(BLUETOOTH_DEVICE_SEARCH_PARAMS);
search_criteria.fReturnAuthenticated = FALSE;
search_criteria.fReturnRemembered = FALSE;
search_criteria.fReturnConnected = TRUE;
search_criteria.fReturnUnknown = FALSE;
search_criteria.fIssueInquiry = FALSE;
search_criteria.cTimeoutMultiplier = 0;

founded_device = BluetoothFindFirstDevice(&search_criteria, &device_info);

if (founded_device == NULL)
{
    _tprintf(TEXT("Error: \n%s\n"), getErrorMessage(WSAGetLastError(), error));
    return -1;
}

do
{
    _tprintf(TEXT("founded device: %s\n"), device_info.szName);

} while (BluetoothFindNextDevice(founded_device, &device_info));
return 0;
Run Code Online (Sandbox Code Playgroud)

我的问题是,在范围内的设备列表中,我总是得到记住的设备.即使fReturnRemembered设置为false.

我需要找到一种方法来获取范围内的设备,而不需要记住设备.

目前我正在做的是,我正在尝试打开一个套接字并尝试进行通信,但还有其他方法吗?

c++ windows bluetooth

5
推荐指数
1
解决办法
4564
查看次数

c配置需要很长时间

我开始用来cProfile描述我的python脚本.我注意到一些非常奇怪的事情.

当我time用来测量脚本的运行时间时需要4.3秒.

当我使用python -m cProfile script.py它需要7.3秒.

在代码中运行探查器时:

import profile
profile.run('main()')
Run Code Online (Sandbox Code Playgroud)

需要63秒!!

我可以理解为什么加分析时,它可能需要更多一点时间,但为什么会出现使用之间的这种差异cProfile来自外部或代码的一部分?我使用这么多时间有原因profile.run吗?

python cprofile

5
推荐指数
1
解决办法
658
查看次数