我使用7zip创建SFX,如下所示:
7z.exe a -r archive.7z *
然后,我用7zS.sfx文件(用于创建自解压安装程序)、配置文件"build.config"和归档文件进行二进制复制。配置文件的内容如下:
;!@Install@!UTF-8!
RunProgram="setup.exe"
GUIMode="1"
Path="%tmp%\mytemp"
;!@InstallEnd@!
二进制复制命令如下:
copy /b 7zS.sfx + build.config + archive.7z sfxInstaller.exe
问题是结果SFX"sfxInstaller.exe"需要管理员权限才能执行。是否可以使用不需要管理员权限的7-Zip生成自解压档案?如果是,我应该使用哪些参数/命令行参数?提前谢谢。
我用mpursuit答案解决了这个问题。
要更新7zS.sfx的清单,您可以使用以下程序:
manifest.xml
<?xml version="1.0" encoding="utf-8"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3">
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
<application>
<!--application support for Windows Vista -->
<supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/>
<!--application support for Windows 7 -->
<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>
</application>
</compatibility>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<requestedPrivileges>
<requestedExecutionLevel level="asInvoker" uiAccess="false"/>
</requestedPrivileges>
</security>
</trustInfo>
</assembly>
call "C:Program Files (x86)Microsoft Visual Studio 12.0VCvcvarsall.bat" x86
mt.exe -manifest manifest.xml -outputresource:"7zS.sfx;#1"
copy /b 7zS.sfx + build.config + archive.7z sfx_archive.exe
您可以在原始7zs.sfx中嵌入一个清单文件,通知Windows使用与父进程相同的访问令牌运行提取器。这将导致自提取器以普通用户的身份运行,如果这是用户登录的身份。
以下链接描述了如何使用VisualStudio2005在可执行文件中嵌入清单文件,但在更高版本中也适用相同的过程。https://support.microsoft.com/kb/944276
一旦嵌入了将"requestedExecutionLevel"设置为"asInvoker"的清单文件,任何使用修改后的7sz.sfx以正常方式创建的自提取存档都不需要管理员权限。
不幸的是,我还没有找到一种使用不需要管理员权限的7zip生成SFX的方法。在尝试了其他一些SFX生成器后,我在IExpress上停了下来,它完全满足了我的需求。
将MiscFlags="4"
放入配置文件中。这应该能解决你的问题。
它应该是这样的:
;!@Install@!UTF-8!
RunProgram="setup.exe"
GUIMode="1"
Path="%tmp%\mytemp"
MiscFlags="4"
;!@InstallEnd@!
我不明白MiscFlags="4"如何解决这个问题。
问题的原因是什么?您对文件使用复制/b 7zS.sfx(或7zS2或7zSD,无关紧要),它将为您提供一个仅以管理员身份运行的文件权限。角色(管理员、简单用户)可以运行应用程序的信息存储在应用程序内部的清单中。7zS(或7zS2或7zSD)没有清单。因此,如果您使用Windows Vista或更高版本,结果文件将提示您输入管理员凭据。
这篇文章将对你有所帮助。阅读"摆脱UAC提示"。
https://www.excelsiorjet.com/kb/35/howto-create-a-single-exe-from-your-java-application
您可以使用资源编辑器软件(如ResEdit)来解决此问题。您应该在7zS.sfx文件中添加一个包含安全信息的清单:
<security>
<requestedPrivileges>
<requestedExecutionLevel
level="asInvoker"
uiAccess="false"/>
</requestedPrivileges>
</security>
您可以使用7zsd.sfx而不是7 zs.sfx。这将不需要管理员权限。
它运行良好,感谢您的帮助但我曾经呼叫";C: \Program Files(x86)\Microsoft Visual Studio 10.0\VC\vcvarsall.bat"x86mt.exe-manifest manifest.xml-outputsource:"7zSD.sfx#1〃;copy/b 7zSD.sfx+config.txt+techselfsupport.7z techselvesupport.exe