chr
2024-10-09 1f645778ae80a3a8801b8bb4d0fcf8feb244ad43
InnoSetupScript/PdmSwPlugin.iss
@@ -3,16 +3,16 @@
; AppName
#define AppName = "PdmSwPlugin"
; 打包的应用文件夹路径
#define AppDir = "C:\Workspace\PdmSwPlugin2\PdmSw\bin\x64\Release\"
#define AppDir = "D:\Workspace\PdmSwPlugin2\PdmSw\bin\x64\Release\"
; 自动更新程序路径
#define AutoUpdaterDir = "C:\Workspace\PdmSwPlugin2\PdmSw\bin\x64\Release\Release\AutoUpdater\"
#define AutoUpdaterDir = "D:\Workspace\PdmSwPlugin2\PdmSw\bin\x64\Release\AutoUpdater\"
; 版本
#define Version = "_0.0.0.40"
#define Version = "_0.0.0.42"
; 生成的Installer存放路径
#define OutPutDir = "Z:\Main\Workspace\Output"
#define OutPutDir = "Z:\Output"
#define DllName = "PdmSwPlugin.dll"
#define MyAppExeName "SolidWorksListener.exe"
[Setup]
; NOTE: The value of AppId uniquely identifies this application. Do not use the same AppId value in installers for other applications.
@@ -35,12 +35,14 @@
WizardStyle=modern
PrivilegesRequired=admin
UsedUserAreasWarning=no
AlwaysRestart=yes
[Languages]
Name: "chinesesimplified"; MessagesFile: "compiler:Languages\ChineseSimplified.isl"
[Files]
[Files]
Source: "{#AppDir}*"; DestDir: "{app}"; Excludes: "temp\*,Log\*"; Flags:recursesubdirs ignoreversion
;Source: "InnoSetupUtil.dll"; DestDir: "{app}"
;Source: "{#AutoUpdaterDir}*"; DestDir: "{app}\AutoUpdater"; Excludes: "download\*"; Flags: ignoreversion
; NOTE: Don't use "Flags: ignoreversion" on any shared system files
@@ -49,6 +51,7 @@
[Run]  
Filename: {dotnet4064}\RegAsm.exe; Parameters: /codebase {#DllName}; WorkingDir: {app}; Flags: runhidden nowait skipifsilent;
Filename: {app}\Listener\SolidWorksListener.exe; WorkingDir: {app}\Listener\; Flags: runhidden nowait skipifsilent;
[UninstallRun]
Filename: {dotnet4064}\RegAsm.exe; Parameters: /unregister {#DllName}; WorkingDir: {app}; RunOnceId: DelService; Flags: runhidden nowait;
@@ -68,11 +71,78 @@
Root: HKLM64; Subkey: "SOFTWARE\SolidWorks\Addins\{{{#AppId}}"; ValueType: dword; ValueName: ""; ValueData: 0; Flags: deletevalue
Root: HKLM64; Subkey: "SOFTWARE\SolidWorks\Addins\{{{#AppId}}"; ValueType: string; ValueName: "Description"; ValueData: "PDM插件"; Flags: deletevalue
Root: HKLM64; Subkey: "SOFTWARE\SolidWorks\Addins\{{{#AppId}}"; ValueType: string; ValueName: "Title"; ValueData: "PdmSw"; Flags: deletevalue
; 监听器
;Root: HKLM64; Subkey: "SYSTEM\CurrentControlSet\Services\SolidWorks Listener"; Flags: uninsdeletekey
;Root: HKLM64; Subkey: "SYSTEM\CurrentControlSet\Services\SolidWorks Listener"; ValueType: string; ValueName: "DisplayName"; ValueData: "SolidWorks Listener"; Flags: deletevalue
;Root: HKLM64; Subkey: "SYSTEM\CurrentControlSet\Services\SolidWorks Listener"; ValueType: string; ValueName: "ObjectName"; ValueData: "LocalSystem"; Flags: deletevalue
;Root: HKLM64; Subkey: "SYSTEM\CurrentControlSet\Services\SolidWorks Listener"; ValueType: string; ValueName: "ImagePath"; ValueData: "{app}\Listener\PluginListener.exe"; Flags: deletevalue
;Root: HKLM64; Subkey: "SYSTEM\CurrentControlSet\Services\SolidWorks Listener"; ValueType: dword; ValueName: "ErrorControl"; ValueData: 1; Flags: deletevalue
;Root: HKLM64; Subkey: "SYSTEM\CurrentControlSet\Services\SolidWorks Listener"; ValueType: dword; ValueName: "Start"; ValueData: 2; Flags: deletevalue
;Root: HKLM64; Subkey: "SYSTEM\CurrentControlSet\Services\SolidWorks Listener"; ValueType: dword; ValueName: "Type"; ValueData: 272; Flags: deletevalue
; 监听器2.0
Root: HKCU64; Subkey: "SOFTWARE\Microsoft\Windows\CurrentVersion\Run"; ValueType: string; ValueName: "SolidWorksListener"; ValueData: """{app}\Listener\SolidWorksListener.exe"""; Flags: deletevalue uninsdeletevalue
[Icons]
Name: "{group}\{cm:UninstallProgram,Test}"; Filename: "{uninstallexe}"
[code]
// 自定义函数,终止服务
function CheckSoftRun(strExeName: String): Boolean;
// 变量定义
var ErrorCode: Integer;
var bRes: Boolean;
var cmdStr: String;  // 命令
begin
  cmdStr := Format('/c net stop "%s"', [strExeName]);
  if RegValueExists(HKEY_LOCAL_MACHINE, 'SYSTEM\CurrentControlSet\Services\SolidWorks Listener', 'ImagePath') then begin
    // 终止服务
    bRes := ShellExec('open', ExpandConstant('{cmd}'), cmdStr, '', SW_HIDE, ewWaitUntilTerminated, ErrorCode);
    if bRes then begin
      Result := true;
    end else begin
      MsgBox(ExpandConstant('{cm:checkSoftTip}'), mbCriticalError, MB_OKCANCEL);
      Result := false;
      Exit;
    end;
  end else begin
    Result := true;
  end;
end;
function CheckSoftRun3(): Boolean;
var hWnd: Integer;
var ResultCode: Integer;
var exe1: String;
var exe2: String;
begin
  // hWnd := StrToInt(ExpandConstant('{wizardhwnd}'));
  exe1 := Format('/c powershell "Get-Process|Where-Object{$_.Path -eq \"%s\"}|Stop-Process|pause"', [ExpandConstant('{autopf}\HengXin\PdmSwPlugin\Listener\SolidWorksListener.exe')]);
  exe1 := '/c taskkill /f /t /im SolidWorksListener.exe';
  exe2 := '/c taskkill /f /t /im Alert.exe';
  ShellExec('open', ExpandConstant('{cmd}'), exe1, '', SW_HIDE, ewWaitUntilTerminated, ResultCode);
  ShellExec('open', ExpandConstant('{cmd}'), exe2, '', SW_HIDE, ewWaitUntilTerminated, ResultCode);
  Result:= true;
end;
// 开始页下一步时判断软件是否运行
function NextButtonClick(CurPageID: Integer): Boolean;
begin
  if 1=CurPageID then begin
      Result := CheckSoftRun3();
      Exit;
  end;
  Result:= true;
end;
// 卸载时关闭软件
function InitializeUninstall(): Boolean;
begin
  Result := CheckSoftRun3();
end;
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
  if CurUninstallStep = usDone then
@@ -82,3 +152,7 @@
end;
[CustomMessages]
chinesesimplified.checkSoftTip=未能成功停止服务!