要在写入HKLM注册表配置单元时在Vista中弹出UAC对话框,我们选择不使用Win32注册表API,因为缺少Vista权限时,我们需要使用管理员权限重新启动整个应用程序.相反,我们这样做:
ShellExecute(hWnd, "runas" /* display UAC prompt on Vista */, windir + "\\Reg", "add HKLM\\Software\\Company\\KeyName /v valueName /t REG_MULTI_TZ /d ValueData", NULL, SW_HIDE);
Run Code Online (Sandbox Code Playgroud)
这个解决方案工作正常,除了我们的应用程序是一个32位,它运行REG.EXE命令,因为它将是一个使用WOW兼容性层的32位应用程序!:(如果从命令行运行REG.EXE,它在64位模式下正常运行.这很重要,因为如果它作为32位应用程序运行,由于注册表反射,注册表项将最终在错误的位置.
那么有没有办法从32位应用程序以编程方式启动64位应用程序,而不是像使用其父级32位进程(即任务管理器中的"*"后缀)那样使用WOW64子系统运行?
我正在使用Dapper并让它返回一个动态IEnumerable,如下所示:
var rows = conn.Query("SELECT * FROM T WHERE ID = @id", new { id = tableId });
var row = rows.FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)
这里rows是类型IEnumerable<dynamic>.IntelliSense说FirstOrDefault()是等待的,并且有用途await FirstOrDefault().并非所有LINQ查询都显示为等待,但似乎特别是那些单独输出元素的查询.
一旦我改为使用强类型,这种行为就会消失.
是因为.NET无法知道您在运行时接收的类型是否等待,以便它"允许"它,以防您需要它?但是不强制执行吗?或者我应该,由于一些动态语言运行时行为,实际上await在这里使用?
我一直在搜索,但没有在网上找到最小的东西.
好的,这就是后台...我将手动修复项目中的多个资源头文件.这包括修复这个值,除其他外:#define _APS_NEXT_SYMED_VALUE......自动写入(通常)resource.h.
它被记录为具有此目的:
_APS_NEXT_SYMED_VALUE是使用符号浏览器中的"新建"命令手动分配符号值时将发出的下一个符号值.
但符号浏览器在哪里??我想知道,因为我想知道我为这些值设置了什么.我知道类浏览器/视图是什么,我知道对象浏览器是什么,但这让我疯狂.:-D我甚至用Google搜索过"visual studio" "symbol browser",但没有提供有关浏览器的文档.我知道如果那里有"新"命令,我就在正确的位置,我可以在其中手动分配符号值.嗯...
有没有在Win32 API中的一些方法来转换一个三个字母的语言代码,通过返回GetLocaleInfo()与LOCALE_SABBREVLANGNAME指定到相应的LANGID或LCID?也就是说,与GetLocaleInfo()正常情况"反向"进行?
我要做的是解析资源DLL正在使用什么样的语言,到目前为止,没有涉及DLL的任何内容,使用格式的dll名称nameLNG.dll,其中LNG是三个字母的语言代码,似乎假设存在这样的函数,这是最简单的方法.
如果这不容易做到,我想Plan B就是给我们的语言DLL一个版本信息资源,在那里指定他们各自的文化,然后在应用程序中,阅读他们使用的文化.