Setup Factory用户只选择硬盘根目录时自动创建MyApp文件夹

曾经在网上看到有网友问:

我用Setup Factory 制作的安装程序,在执行安装的时候会有默认的安装路径,同时用户也可以选择安装路径。
比如默认的安装路径是 C:/Program Files/MyApp/
用户选择路径的D:/Program Files/
继续安装的话就会直接安装到D:/Program Files/,通常这个目录下很多其他文件,一不小心就会造成误操作把文件都安装到D:/Program Files/了。
能不能自动补全上MyApp?怎么做?

 

后来我也遇到这种问题,查看了Setup Factory的帮助文档,找到了解决的办法。

只需要在Setup Factory目录下找到全局函数文件 _SUF70_Global_Functions.lua

用记事本打开并查找 g_EditFieldFolderBrowse

 

代码很简单,把这个函数改为如下:

function g_EditFieldFolderBrowse(nIDEditField, strPrompt)

	-- replace the contents of the edit field with the folder path that was selected
	--修改的内容,添加程序文件夹
	tbEditProps.Text = String.Replace(tbEditProps.Text, "\\", "", false);
	size = String.Length(strTargetFolder);
	if(size <= 3)then
		tbEditProps.Text = strTargetFolder.."\MyApp";
	else
		tbEditProps.Text = strTargetFolder.."\\".."MyApp";
	end
	--去掉重复的文件夹
	DlgEditField.SetProperties(nIDEditField, tbEditProps);

网上找了很多方法,试了试发现有问题。

如果用户选择 C: 那么 \\ 就会有问题,C:\\Myapp 会提示路径错误。只能使用 "\MyApp"

如果用户选择 C:\ProgramFiles 那么 \MyApp 会自动变成 C:\ProgramFiles\\MyApp。这时就要用到 "\\".."MyApp"

所以上面加了一个验证,来判断追加什么样的格式

这个原理如果有人明白的话可以指出,谢谢

 

def create_app(config_name='default'): """应用工厂函数""" # 在应用启动立即配置日志 # 这确保了所有后续的日志记录都使用我们定义的滚动文件处理器 from tools.log_config import setup_logging setup_logging() app = Flask(__name__, instance_relative_config=True) CORS(app) # 加载配置 # 处理 Worker 子进程中可能出现的 "No module named 'config'" 问题 try: from config import config except ModuleNotFoundError: # 动态将项目根目录加入 sys.path 后重试 current_dir = os.path.abspath(os.path.dirname(__file__)) project_root_retry = os.path.abspath(os.path.join(current_dir, os.pardir)) if project_root_retry not in sys.path: sys.path.insert(0, project_root_retry) from config import config # 再次尝试导入 app.config.from_object(config[config_name]) # 确保JSON序列化配置正确,解决中文乱码问题 - 适用于Flask 3.x app.config['JSON_AS_ASCII'] = False app.config['JSONIFY_PRETTYPRINT_REGULAR'] = True app.config['JSON_SORT_KEYS'] = False # Flask 3.x的正确配置方式 app.json.ensure_ascii = False app.json.sort_keys = False # 初始化数据库 db.init_app(app) # 为 gevent 环境配置数据库线程安全 with app.app_context(): # 确保数据库引擎使用线程安全模式 from sqlalchemy import event @event.listens_for(db.engine, "connect") def set_pragma(dbapi_connection, connection_record): # 只在数据库是 SQLite 执行 PRAGMA 指令 if db.engine.name == 'sqlite': cursor = dbapi_connection.cursor() cursor.execute("PRAGMA journal_mode=WAL") cursor.execute("PRAGMA synchronous=NORMAL") cursor.execute("PRAGMA temp_store=memory") cursor.execute("PRAGMA mmap_size=268435456") # 256MB cursor.close() # 配置Swagger UI - 简化配置 swagger_template = { "swagger": "2.0", "info": { "title": "异步调度服务器", "description": "基于Flask和Celery的异步任务调度服务", "version": "1.0.0" }, "host": "127.0.0.1:5000", "basePath": "/", "schemes": ["http"] } swagger_config = { "headers": [], "specs": [ { "endpoint": 'apispec_1', "route": '/apispec_1.json', "rule_filter": lambda rule: True, # all in "model_filter": lambda tag: True, # all in } ], "static_url_path": "/flasgger_static", "swagger_ui": True, "specs_route": "/apidocs/", "uiversion": 3 } Swagger(app, template=swagger_template, config=swagger_config) # 添加全局响应处理器,确保中文编码正确 @app.after_request def after_request(response): # 确保JSON响应使用UTF-8编码 if response.content_type and response.content_type.startswith('application/json'): response.headers['Content-Type'] = 'application/json; charset=utf-8' return response # 注册teardown函数 @app.teardown_appcontext def shutdown_session(exception=None): db.session.remove() # 在应用上下文中创建所有数据表 with app.app_context(): # 导入所有模型,以便 SQLAlchemy 能够正确创建它们 from app.models import task, log # noqa db.create_all() return app def create_celery_app(app): # todo 从app.config读取 """创建独立的Celery应用""" # 在 Celery app 创建,也配置一次日志 # 这对 beat 调度器或直接调用任务的场景很重要 from tools.log_config import setup_logging setup_logging() # 创建任务上下文 class ContextTask(Task): def __call__(self, *args, **kwargs): with app.app_context(): return self.run(*args, **kwargs) celery = Celery(app.import_name, task_cls=ContextTask) # 基础配置 celery.conf.update( broker_url='redis://127.0.0.1:6379/0', result_backend='redis://127.0.0.1:6379/1', # broker_url=app.config['CELERY_BROKER_URL'], # result_backend=app.config['CELERY_RESULT_BACKEND'], task_serializer='json', result_serializer='json', accept_content=['json'], timezone='UTC', enable_utc=True, # Windows兼容性配置 - 使用gevent # worker_pool='gevent', # 移除此行 worker_concurrency=20, # 添加任务发现配置 task_always_eager=False, # 确保任务异步执行 result_expires=3600, # 结果保存1小 # 添加队列定义,确保只使用celery队列 task_default_queue='celery', task_create_missing_queues=True, # 让 Celery 不要覆盖我们自定义的 root logger,直接复用现有 handler worker_hijack_root_logger=False, # 将标准输出/错误也重定向到 logging,确保 print() 内容写入日志 worker_redirect_stdouts=True, worker_redirect_stdouts_level='INFO', # 可靠性配置:防止任务丢失 task_acks_late=True, # 任务完成后才确认,防止 Worker 崩溃导致任务丢失 worker_prefetch_multiplier=1, # 减少预取,确保任务均匀分配 task_reject_on_worker_lost=True, # Worker 丢失拒绝任务,重新排队 ) celery.set_default() return celery # 创建全局Celery实例 flask_app = create_app() celery_app = create_celery_app(flask_app) @celery_app.task def long_task(data): sleep(10) return len(data) 优化以上代码便于flask编写蓝图和路由,可以拆分为几个python文件
最新发布
08-10
### 关于 Tauri Framework 中缺少 `.tauri` 文件夹的解决方案 在 Tauri 项目初始化过程中,`.tauri` 文件夹通常由 CLI 自动生成。此文件夹存储了一些临文件和缓存数据,例如编译器所需的工具链信息、依赖项以及构建产物等[^1]。然而,在某些情况下(如克隆现有仓库或手动删除该目录),可能会遇到 `.tauri` 文件夹丢失的情况。 #### 初始化 `.tauri` 文件夹的方法 如果发现根目录下不存在 `.tauri` 文件夹,可以通过以下方法重新生成它: - 使用 Tauri 提供的内置命令来清理并重建环境: ```bash pnpm tauri clean ``` 此命令会清除旧有的构建缓存,并尝试恢复默认状态,包括创建必要的子目录结构[^2]。 - 另一种方式是强制重置整个项目配置: ```bash rm -rf .tauri && pnpm tauri init ``` 上述脚本首先移除现有的 `.tauri` 文件夹,接着调用 `init` 子命令重新设置基础架构[^3]。 #### 修改 Bundle Identifier 后的影响 当按照之前的错误提示修改了 `tauri.conf.json` 中的 `bundle.identifier` 字段后,再次执行构建操作之前,请确保所有相关联的数据已被刷新。这一步骤有助于避免因残留的历史记录引发新的异常状况发生[^1]。 --- ### 示例代码展示 下面是一个典型的 `tauri.conf.json` 配置片段,其中包含了合法的捆绑标识符设定: ```json { "tauri": { "bundle": { "identifier": "org.example.myapp", ... } } } ``` 注意替换 `"org.example.myapp"` 成为您自己的唯一字符串表示形式[^1]。 --- ### 注意事项 在整个修复流程里需要注意几个要点: 1. 确保安装有最新的 Node.js 和 Rust 工具链版本; 2. 检查是否遗漏其他必需参数填写工作 (比如开发者证书签名选项卡里的字段)[^3]; 3. 如果仍然存在问题,则考虑查看官方文档获取进一步指导或者提交 Issue 请求社区协助解决。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值