小编Chr*_*ter的帖子

将应用程序清单嵌入到VB6 exe中

我最近浏览了一堆用VB6编写的独立实用程序应用程序,以确保Windows Vista及更高版本的注册表虚拟化已关闭.我为每个exe创建了一个独立的清单文件,设置得requestedExecutionLevel恰当(其中一些需要修改HKEY_LOCAL_MACHINE注册表项,其他不需要),并测试它们.它们似乎都正常工作.

我只剩下一个小问题.由于它们是独立的实用程序,人们习惯于只在网络上复制它们并手动运行它们.如果有人忘记复制清单文件以及exe,那么exe将静默写入虚拟化注册表项而不是真实注册表项,并导致难以调试的问题.

显而易见的解决方案是将清单作为资源嵌入到exe中.我在网上看到的所有文章都告诉你要嵌入这样的资源:

#define CREATEPROCESS_MANIFEST_RESOURCE_ID 1
#define RT_MANIFEST 24
CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST "app.manifest"
Run Code Online (Sandbox Code Playgroud)

这应该工作得很好,除了VB编译器总是创建资源ID = 1的应用程序图标.当我尝试上面的代码时,Windows拒绝运行exe,抱怨资源错误(我将更新此帖子与细节稍后).我尝试将资源ID更改为另一个数字,之后Windows成功运行程序但未识别清单内容.

有没有人知道如何让一个嵌入式清单在VB6 exe中工作,或者我应该坚持使用外部文件?

更新1

上面给出的文本是.rc文件的全部内容.我把它编译成这样的.res文件:

"%ProgramFiles%\Microsoft Visual Studio\VB98\Wizards\rc.exe" /r /fo "Resources.res" "Resources.rc"

并将其嵌入VB6项目文件中,如下所示:

Type=Exe
Reference=*\G{00020430-0000-0000-C000-000000000046}#2.0#0#..\..\..\..\..\..\..\..\WINDOWS\system32\stdole2.tlb#OLE Automation
Form=Main.frm
ResFile32="Resources.res"
IconForm="FMain"
Startup="FMain"
HelpFile=""
Title="Windows Vista Registry Test - VB6"
ExeName32="RegistryTestVB6.exe"
Path32=""
Command32=""
Name="RegistryTestVB6"
HelpContextID="0"
CompatibleMode="0"
MajorVer=1
MinorVer=0
RevisionVer=0
AutoIncrementVer=0
ServerSupportFiles=0
VersionComments="Windows Vista Registry Test - VB6"
VersionCompanyName=""
VersionFileDescription="Windows Vista Registry Test - VB6"
VersionLegalCopyright=""
VersionProductName="Windows Vista Registry Test - …
Run Code Online (Sandbox Code Playgroud)

vb6 resources uac manifest

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

调用Web服务时出现HTTP 407代理身份验证错误

我正在开发一个通过互联网调用第三方Web服务的.NET应用程序.服务不使用SOAP,因此我们手动构造XML请求文档,通过HTTP将其发送到服务,并检索XML响应.

我们的代码是在正常Windows域帐户的上下文中运行的Windows服务,并且位于配置为需要NTLM身份验证的代理服务器(Microsoft ISA Server)后面.运行我们服务的帐户有权通过代理服务器访问互联网.

代码如下所示:

// Create the request object.
HttpWebRequest request = (HttpWebRequest) WebRequest.Create(url);
request.Method = "POST";

// Configure for authenticating proxy server requiring Windows domain credentials.
request.Proxy = New WebProxy(proxyAddress) { UseDefaultCredentials = true };

// Set other required headers.
request.Accept = acceptableMimeType;
request.Headers.Add(HttpRequestHeader.AcceptCharset, acceptableCharset);
request.Headers.Add(HttpRequestHeader.AcceptEncoding, "none");
request.Headers.Add(HttpRequestHeader.AcceptLanguage, "en-gb");
request.Headers.Add(HttpRequestHeader.CacheControl, "no-store");
request.Headers.Add(HttpRequestHeader.ContentEncoding, "none");
request.Headers.Add(HttpRequestHeader.ContentLanguage, "en-gb");
request.ContentType = requestMimeType;
request.ContentLength = requestBytes.Length;

// Make the method call.
using(Stream stream = request.GetRequestStream()) {
    stream.Write(requestBytes, 0, requestBytes.Length);
}
HttpWebResponse response = …
Run Code Online (Sandbox Code Playgroud)

.net c# authentication proxy windows-services

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

更改计算机名后无法登录SQL Server

我安装了Windows Server 2008和SQL Server 2008 R2,加入域后我更改了计算机名称,错误地从SQL Server登录用户中删除了管理员组,现在我无法登录.

有什么建议吗?

sql sql-server

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

Git Credential Manager 使用 IE,但我希望它使用 Edge

我创建了一个新的 Windows Server 2022 VM,安装了所有待处理的更新,然后安装了最新版本的 Office 365 和 Visual Studio 2022。

Edge已经是系统默认浏览器:

Edge 是默认浏览器

当我尝试从 Azure DevOps 克隆存储库时,会使用 IE 作为浏览器弹出 Git Credential Manager 窗口:

带有 IE 错误消息的 GCM 窗口

IE 不好,因为它不能正确显示登录页面。如何强制 GCM 使用 Edge?

我在命令行上的 Windows 版 Git 和 Visual Studio 中尝试过此操作,但没有什么区别。

.gitconfig我在没有文件(默认行为)和显式最小文件的情况下尝试了此操作.gitconfig,但没有任何区别。

[user]
    name = <me>
    email = <me>
[credential]
    helper = 
    helper = manager
[credential "https://dev.azure.com"]
    usehttppath = true
Run Code Online (Sandbox Code Playgroud)

git-for-windows

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

从.NET安全地释放COM对象引用

我已经在网上阅读了很多关于安全发布RCW的文章,在我看来,没有人能够确切地知道需要按什么顺序做什么,所以我要问你们各位的意见.例如,人们可以这样做:

object target = null;
try {
    // Instantiate and use the target object.
    // Assume we know what we are doing: the contents of this try block
    // do in fact represent the entire desired lifetime of the COM object,
    // and we are releasing all RCWs in reverse order of acquisition.
} finally {
    if(target != null) {
        Marshal.FinalReleaseComObject(target);
        target = null;
        GC.Collect();
        GC.WaitForPendingFinalizers();
    }
}
Run Code Online (Sandbox Code Playgroud)

然而,有些人主张在之前进行垃圾收集Marshal.FinalReleaseComObject,有些人在之后,有些则根本没有.是否真的有必要手动GC每个RCW,特别是在它已经从COM对象中分离出来之后?

在我看来,将RCW从COM对象中分离并让RCW自然过期会更简单,更容易:

object target = null;
try {
    // Same …
Run Code Online (Sandbox Code Playgroud)

.net com-interop rcw

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

从'V'到'System.IEquatable <V>'没有装箱转换或类型参数转换

我有以下扩展方法,它们成功编译并按设计运行.

public static IEnumerable<T> WhereNotEmpty<T>(this IEnumerable<T> source) where T : struct {
    return source.Where(item => !item.Equals(default(T)));
}

public static IEnumerable<V> SelectNotEmpty<T, V>(this IEnumerable<T> source, Func<T, V> selector) where V : struct {
    return source.Select(selector).WhereNotEmpty();
}
Run Code Online (Sandbox Code Playgroud)

但是,为了避免装箱,我添加了一个新的通用约束,如下所示:

public static IEnumerable<T> WhereNotEmpty<T>(this IEnumerable<T> source) where T : struct, IEquatable<T> {
    return source.Where(item => !item.Equals(default(T)));
}

public static IEnumerable<V> SelectNotEmpty<T, V>(this IEnumerable<T> source, Func<T, V> selector) where V : struct, IEquatable<T> {
    return source.Select(selector).WhereNotEmpty(); // compile error!
}
Run Code Online (Sandbox Code Playgroud)

我现在收到一个编译错误,其中SelectNotEmpty调用WhereNotEmpty: …

c# generics

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

按字段排序数据

  var course = from b in DbModle.courses
                            where b.name == "test"
                            select b;

    DataTable dt = new DataTable();
    DataRow dr;
    dt.Columns.Add(new DataColumn("name", typeof(string)));
    dt.Columns.Add(new DataColumn("id", typeof(int)));
    foreach (var course1 in course_university)
    {
        dr = dt.NewRow();
        dr[0] = course1.name;
        dr[1] = course1.id;
        dt.Rows.Add(dr);
    }
Run Code Online (Sandbox Code Playgroud)

我如何DataTable按身份排序?

c# sorting datatable

3
推荐指数
1
解决办法
1994
查看次数

多个NUnit测试程序集,每个都需要不同的配置.如何让NUnit一次性运行它们?

我有13个独立但相关的架构组件和13个独立的NUnit测试组件,每个组件包含其匹配架构组件的所有测试夹具.我使用的是NUnit 2.5.2(目前是最新版本).

我可以在NUnit GUI中单独运行每个测试程序集,并且所有测试都通过.但是,当我将它们组合到一个NUnit项目文件中时,NUnit坚持将单个配置文件应用于整个测试运行.这不起作用,因为每个测试程序集都需要不同的配置.我不能将它们合并到一个"uber-config"文件中,因为有些部分是互斥的.我已尝试在单独的AppDomain中运行项目中的每个程序集,并且还单独处理,但在这两种情况下都无法使用特定于DLL的配置文件,因此所有测试都会崩溃并刻录.

我已经完成了谷歌搜索,但到目前为止我还没有发现NUnit支持这种情况的任何迹象.我是对的,还是我错过了什么?

我已经尽力重新构建测试,以便他们可以共享相同的配置文件,但我不得不承认在这方面的失败.

nunit

2
推荐指数
1
解决办法
1658
查看次数