InnoSetup 打包C#项目问题记录

项目场景:

c#项目使用 InnoSetup 打包时遇到的一些问题记录


问题

  1. 用inno setup 打包安装程序时,每次在添加文件夹时是添加了,可是在用打包好的 exe
    安装程序时,每次都会把原来添加的文件夹下的文件直接装在应用程序所在的文件夹里,不会创建对应的子文件夹。

例如我的ai-sim-back是应应用程序文件夹,内有runtimes文件夹存放若干图片,要想安装后图片仍在runtimes文件夹内,

c 复制代码
Source: "G:\ai-sim-back\runtimes\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
	

需要把上面的脚本改成如下,要在 {app} 后添加你的文件夹名:

csharp 复制代码
Source: "G:\ai-sim-back\runtimes\*"; DestDir: "{app}\runtimes"; Flags: ignoreversion recursesubdirs createallsubdirs

  1. 指定桌面快捷方式和快速启动图标

需要在 [Icons] 下的脚本添加如下脚本 IconFilename: "{app}\icon\logo.ico" ,跟前面的脚本要用分号隔开

csharp 复制代码
[Icons]
Name: "{autoprograms}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}";IconFilename: "{app}\icon\logo.ico"
Name: "{autodesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon;IconFilename: "{app}\icon\logo.ico"

  1. 禁止用户更改安装路径,只能使用默认的安装路径

WizardForm.DirEdit.Text := ExpandConstant('{pf}\Simulation'); '{pf}是exe安装所在路径,使用如下脚本,实际是隐藏了选择安装路径的部分。

csharp 复制代码
[Code]
const
  MyAppName = 'Simulation';
  MyAppExeName = 'Simulation.exe';

procedure InitializeWizard;
begin
  // 确保目录选择页面被禁用
  WizardForm.DirEdit.Visible := False;
  WizardForm.FilenameLabel.Visible := False;
  WizardForm.DirBrowseButton.Visible := False;

  // 设置固定的安装路径
  WizardForm.DirEdit.Text := ExpandConstant('{pf}\Simulation');
end;
  1. 添加开机自启动注册表,可以是 exe 也可以是其他文件,不同于服务

解释下方脚本: "SimulationVBS" 是注册表键名

"{app}\run\run_server.vbs" 是要自启动的文件路径,这里是一个 .vbs 文件

注意 :如果想要查看注册表的话,64位的软件和32的软件注册表的路径位置不同,

32位的会在 HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Run 里面

64位的会在 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run 里面

csharp 复制代码
[Registry]
Root: HKLM; Subkey: "SOFTWARE\Microsoft\Windows\CurrentVersion\Run"; ValueType: string; ValueName: "SimulationVBS"; ValueData: """wscript.exe"" ""{app}\run\run_server.vbs"""

如果想指定打包的 exe 为64位的可以这样做:

csharp 复制代码
[Setup]
ArchitecturesInstallIn64BitMode=x64 ia64

[Registry]
Root: HKLM64; Subkey: "SOFTWARE\Microsoft\Windows\CurrentVersion\Run"; ValueType: string; ValueName: "SimulationVBS"; ValueData: """wscript.exe"" ""{app}\run\run_server.vbs"""
相关推荐
sali-tec1 小时前
C# 基于halcon的视觉工作流-章29-边缘提取-亚像素
开发语言·图像处理·算法·计算机视觉·c#
屁股割了还要学2 小时前
【数据结构入门】堆
c语言·开发语言·数据结构·c++·考研·算法·链表
Flobby5293 小时前
Go 语言中的结构体、切片与映射:构建高效数据模型的基石
开发语言·后端·golang
lsx2024064 小时前
Vue.js 响应接口:深度解析与实践指南
开发语言
froginwe114 小时前
Vue.js 样式绑定
开发语言
Algebraaaaa6 小时前
为什么C++主函数 main 要写成 int 返回值 | main(int argc, char* argv[]) 这种写法是什么意思?
开发语言·c++
java1234_小锋7 小时前
一周学会Matplotlib3 Python 数据可视化-绘制饼状图(Pie)
开发语言·python·信息可视化
ccut 第一混7 小时前
c#联合Halcon进行OCR字符识别(含halcon-25.05 百度网盘)
c#·ocr·halcon
悟能不能悟8 小时前
能刷java题的网站
java·开发语言
IT古董8 小时前
【第四章:大模型(LLM)】05.LLM实战: 实现GPT2-(6)贪婪编码,temperature及tok原理及实现
android·开发语言·kotlin