11

我使用 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

问题是结果自解压“sfxInstaller.exe”需要管理员权限才能执行。是否可以使用 7-Zip 生成不需要管理员权限的自解压档案?如果是这样,我应该使用哪些参数/命令行参数?提前致谢。

4

6 回答 6

8

我用mpursuit answer解决了这个问题。

要更新 7zS.sfx 的清单,您可以使用以下过程:

清单.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.0\VC\vcvarsall.bat" x86
mt.exe -manifest manifest.xml -outputresource:"7zS.sfx;#1"
copy /b 7zS.sfx + build.config + archive.7z sfx_archive.exe
于 2019-01-16T07:56:17.867 回答
2

您可以在原始 7zs.sfx 中嵌入一个清单文件,通知 Windows 使用与父进程相同的访问令牌运行提取程序。如果这是用户登录的身份,这将导致自提取器以普通用户身份运行。

以下链接描述了如何使用 Visual Studio 2005 将清单文件嵌入到可执行文件中,但相同的过程适用于更高版本。https://support.microsoft.com/kb/944276

一旦您嵌入了将“requestedExecutionLevel”设置为“asInvoker”的清单文件,任何以正常方式使用修改后的 7sz.sfx 创建的自解压档案都不需要管理员权限。

于 2014-11-26T11:58:32.970 回答
1

放入MiscFlags="4"你的配置文件。那应该可以解决您的问题。

它应该如下所示:

;!@Install@!UTF-8!
RunProgram="setup.exe"
GUIMode="1"
Path="%tmp%\\mytemp"
MiscFlags="4"
;!@InstallEnd@!
于 2015-01-18T05:49:36.147 回答
1

不幸的是,我还没有找到一种使用 7zip 生成不需要管理员权限的 SFX 的方法。在尝试了其他一些 SFX 生成器后,我在完全满足我需求的IExpress上停下来。

于 2013-10-10T11:05:41.517 回答
1

我不明白 MiscFlags="4" 如何解决问题。

问题的原因是什么?您对文件使用 copy /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>
于 2019-02-13T12:58:47.420 回答
0

您可以使用7zsd.sfx代替7zs.sfx。这不需要管理员权限。

于 2014-04-18T08:49:25.250 回答