使用xjar+exe4j+inno setup把加密后的jar打包成exe应用程序并创建服务

1、使用xjar对jar包进行加密

在项目的pom.xml中加入xjar的插件依赖,最好用2.x.x版本,高版本不支持-Dxjar.mode,无法免密码启动

github地址:xjar-maven-plugin

          <plugin>
                <groupId>com.github.core-lib</groupId>
                <artifactId>xjar-maven-plugin</artifactId>
                <version>2.1.1</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>build</goal>
                        </goals>
                        <phase>package</phase>
                        <configuration>
                            <targetJar>${project.build.finalName}-encrypted.jar</targetJar>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

然后运行maven命令

mvn clean package -Dxjar.password=vOM73KJ6SACp9kql6lWGTXSt -Dxjar.mode=1

-Dxjar.password:xjar的加密秘钥

-Dxjar.mode:加密模式,0:普通模式 1:危险模式(免密码启动),一定要为1,否则用exe4j转成exe后将无法正常启动exe

2.使用exe4j+inno setup打包成exe应用程序

 详细步骤见这位大佬的保姆级教程:Java jar打包成exe应用程序(超详细)

​不过需要在exe4j的选择启动模式时选择Service,不知道选择其他启动模式可不可以,反正我是选择了Service

选择jar包的时候需要选择加密后的jia包,选择启动类的时候需要选择io.xjar.boot.XJarLauncher

然后在最后的inno setup的脚本文件里需要加上下面这段代码

[Code]
// 在安装过程中的不同步骤之间切换时被调用
procedure CurStepChanged(CurStep: TSetupStep);
var
  ResultCode: integer;
  StartResultCode: integer;
  Command: string;
begin
  // 安装步骤已经完成,但安装程序还没有显示完成对话框
  if CurStep = ssPostInstall then
  begin
    // 安装服务的命令
    Command := 'sc create 服务名称 binPath= ' + ExpandConstant('{app}') + '\软件名称.exe start=auto DisplayName=服务名称';
    Exec(ExpandConstant('{cmd}'), '/C ' + Command, '', 0, ewWaitUntilTerminated, ResultCode);
    
     // 检查执行结果
    if ResultCode <> 0 then
    begin
      MsgBox('服务安装失败,错误代码: ' + IntToStr(ResultCode), mbError, MB_OK);
    end;
    
    // 启动服务的命令
    Exec(ExpandConstant('{cmd}'), '/C sc start 服务名称', '', 0, ewWaitUntilTerminated, StartResultCode);
    
    // 检查执行结果
    if StartResultCode <> 0 then
    begin
      MsgBox('服务启动失败,错误代码: ' + IntToStr(StartResultCode), mbError, MB_OK);
    end;
  end;
end;

// 执行卸载前的准备工作
function InitializeUninstall(): Boolean;
var
  StopResultCode: integer;
begin
  // 停止服务的命令
  Exec(ExpandConstant('{cmd}'), '/C sc stop 服务名称', '', 0, ewWaitUntilTerminated, StopResultCode);
    
  // 检查执行结果
  if StopResultCode <> 0 then
  begin
    MsgBox('服务停止失败,错误代码: ' + IntToStr(StopResultCode), mbError, MB_OK);
  end;
  Result := True;
end;

// 执行卸载后的收尾工作
procedure DeinitializeUninstall();
var
  DeleteResultCode: integer;
begin
  // 删除服务的命令
  Exec(ExpandConstant('{cmd}'), '/C sc delete 服务名称', '', 0, ewWaitUntilTerminated, DeleteResultCode);
    
  // 检查执行结果
  if DeleteResultCode <> 0 then
  begin
    MsgBox('服务删除失败,错误代码: ' + IntToStr(DeleteResultCode), mbError, MB_OK);
  end;
end;

以上就能在安装软件的时候自动创建相应的服务并启动该服务,卸载软件的时候自动停止并删除该服务

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值