c# 使用 mt.exe v1.0.0.0 在 .exe 中嵌入清单文件
c# Embed manifest file within .exe using mt.exe v1.0.0.0
我有一个用 visual studio .NET 2003 制作的遗留控制台应用程序。
我试图在构建时生成的 .exe 中嵌入清单文件但没有成功,因为我想避免 windows 7 ultimate 中的 UAC 在我的应用程序启动时弹出。
所以我的清单文件在下面,名为 MyTestApp.exe.manifest:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity version="1.0.0.0"
processorArchitecture="X86"
name="IsUserAdmin"
type="win32"/>
<description>SDPUpdater for ServiDirPlus</description>
<!-- Identify the application security requirements. -->
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<requestedPrivileges>
<requestedExecutionLevel
level="requireAdministrator"
uiAccess="false"/>
</requestedPrivileges>
</security>
</trustInfo>
</assembly>
然后在 Visual Studio .NET 2003 中,在 post-build 操作中我编写了以下命令:
"C:\Program Files (x86)\Microsoft Visual Studio .NET 2003\Common7\Tools\Bin\winnt\mt.exe" -清单“$(ProjectDir)$(TargetFileName).manifest”
考虑到:
$(ProjectDir) : C:\MyProjects\ConsoleApps\MyTestApp\
$(TargetFileName) : MyTestApp.exe
我的清单文件 MyTestApp.exe.manifest 在 C:\MyProjects\ConsoleApps\MyTestApp\
但出现以下错误:
Performing Post-Build Event...
Microsoft (R) Side-By-Side Manifest Tool 1.0.0.0
Copyright (C) Microsoft Corporation 2000-2001. All Rights Reserved.
Nothing to do!
Modes of operation:
-hashupdate Update hashes of member files
-makecdfs Generate CDF files to make catalogs
-verbose Disply piles of debugging information
Modifiers:
-manifest <foo.man> The name of the manifest to work with
Normal usage: mt.exe -hashupdate -makecdfs -manifest foo.man
Project error: A tool returned an error code from the build event
Post-Build Event failed
我想我必须向 mt.exe 表明我的清单文件必须嵌入 MyTestApp.exe 但我不知道如何嵌入,因为 mt.exe v1.0.0.0 只有 1修饰符(清单),它不提供任何方式来指示我的 MyTestApp.exe 文件。
我使用了 mt.exe(Microsoft (R) 清单工具版本 5.2.3790.2075)并在 post-build:
中使用了这一行
"C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bin\mt.exe" -清单 "$(ProjectDir)$(TargetFileName).manifest" -outputresource:$(TargetFileName);#1
现在可以编译了。
现在,我还有一个问题:
启动控制台应用程序后,uac 弹出通知继续出现。
我的控制台应用正在写入 C:\Program Files\ 中属于我的文件夹。
不过最好另开post一下吧。已解决。
我有一个用 visual studio .NET 2003 制作的遗留控制台应用程序。 我试图在构建时生成的 .exe 中嵌入清单文件但没有成功,因为我想避免 windows 7 ultimate 中的 UAC 在我的应用程序启动时弹出。
所以我的清单文件在下面,名为 MyTestApp.exe.manifest:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity version="1.0.0.0"
processorArchitecture="X86"
name="IsUserAdmin"
type="win32"/>
<description>SDPUpdater for ServiDirPlus</description>
<!-- Identify the application security requirements. -->
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<requestedPrivileges>
<requestedExecutionLevel
level="requireAdministrator"
uiAccess="false"/>
</requestedPrivileges>
</security>
</trustInfo>
</assembly>
然后在 Visual Studio .NET 2003 中,在 post-build 操作中我编写了以下命令:
"C:\Program Files (x86)\Microsoft Visual Studio .NET 2003\Common7\Tools\Bin\winnt\mt.exe" -清单“$(ProjectDir)$(TargetFileName).manifest”
考虑到:
$(ProjectDir) : C:\MyProjects\ConsoleApps\MyTestApp\
$(TargetFileName) : MyTestApp.exe
我的清单文件 MyTestApp.exe.manifest 在 C:\MyProjects\ConsoleApps\MyTestApp\
但出现以下错误:
Performing Post-Build Event...
Microsoft (R) Side-By-Side Manifest Tool 1.0.0.0
Copyright (C) Microsoft Corporation 2000-2001. All Rights Reserved.
Nothing to do!
Modes of operation:
-hashupdate Update hashes of member files
-makecdfs Generate CDF files to make catalogs
-verbose Disply piles of debugging information
Modifiers:
-manifest <foo.man> The name of the manifest to work with
Normal usage: mt.exe -hashupdate -makecdfs -manifest foo.man
Project error: A tool returned an error code from the build event
Post-Build Event failed
我想我必须向 mt.exe 表明我的清单文件必须嵌入 MyTestApp.exe 但我不知道如何嵌入,因为 mt.exe v1.0.0.0 只有 1修饰符(清单),它不提供任何方式来指示我的 MyTestApp.exe 文件。
我使用了 mt.exe(Microsoft (R) 清单工具版本 5.2.3790.2075)并在 post-build:
中使用了这一行"C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bin\mt.exe" -清单 "$(ProjectDir)$(TargetFileName).manifest" -outputresource:$(TargetFileName);#1
现在可以编译了。
现在,我还有一个问题:
启动控制台应用程序后,uac 弹出通知继续出现。
我的控制台应用正在写入 C:\Program Files\ 中属于我的文件夹。
不过最好另开post一下吧。已解决。