桌面端打包优化
This commit is contained in:
@@ -163,9 +163,11 @@ namespace YY.Admin.Core.SqlSugar
|
||||
config.ConnectionString = CryptogramUtil.Decrypt(config.ConnectionString);
|
||||
}
|
||||
|
||||
// SQLite 相对路径默认依赖进程工作目录;快捷方式/从不同目录启动会在别处生成空库,表现为发布后菜单全空
|
||||
// SQLite 相对路径会解析到 LocalApplicationData\Data(见 ResolveSqliteConnectionToAbsolutePath)
|
||||
if (config.DbType == DbType.Sqlite && !string.IsNullOrWhiteSpace(config.ConnectionString))
|
||||
{
|
||||
// 安装包随带的 Admin.NET.db / Slave.db 在安装目录;运行时代码只读写可写目录。首启若无用户库则从安装目录复制模板。
|
||||
TrySeedSqliteFromInstallDirectory(config.ConnectionString);
|
||||
config.ConnectionString = ResolveSqliteConnectionToAbsolutePath(config.ConnectionString);
|
||||
}
|
||||
|
||||
@@ -266,7 +268,41 @@ namespace YY.Admin.Core.SqlSugar
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 将 SQLite 连接串中的相对 DataSource 解析为基于应用程序基目录的绝对路径。
|
||||
/// 首次启动时:若用户数据目录中尚无该 SQLite 文件,且安装目录(exe 旁)存在同名库,则复制一份作为初始模板。
|
||||
/// 否则安装包内随带的菜单/配置永远不会被用到(实际始终读写 %LocalAppData%\YY.Admin\Data\)。
|
||||
/// </summary>
|
||||
private static void TrySeedSqliteFromInstallDirectory(string connectionString)
|
||||
{
|
||||
try
|
||||
{
|
||||
var builder = new SqliteConnectionStringBuilder(connectionString);
|
||||
var ds = builder.DataSource;
|
||||
if (string.IsNullOrWhiteSpace(ds) || Path.IsPathFullyQualified(ds))
|
||||
return;
|
||||
|
||||
var fileName = Path.GetFileName(ds.TrimStart('.', '/', '\\'));
|
||||
if (string.IsNullOrWhiteSpace(fileName))
|
||||
fileName = "Admin.NET.db";
|
||||
|
||||
var dataDir = AppWritablePaths.EnsureDirectoryExists(AppWritablePaths.DataDirectory);
|
||||
var targetPath = Path.Combine(dataDir, fileName);
|
||||
if (File.Exists(targetPath))
|
||||
return;
|
||||
|
||||
var bundledPath = Path.Combine(AppContext.BaseDirectory, fileName);
|
||||
if (!File.Exists(bundledPath))
|
||||
return;
|
||||
|
||||
File.Copy(bundledPath, targetPath, overwrite: false);
|
||||
}
|
||||
catch
|
||||
{
|
||||
// 忽略:后续仍可按空库走建表/基准种子
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 将 SQLite 连接串中的相对 DataSource 解析为 %LocalAppData%\YY.Admin\Data\ 下绝对路径(适配 Program Files 只读安装)。
|
||||
/// </summary>
|
||||
private static string ResolveSqliteConnectionToAbsolutePath(string connectionString)
|
||||
{
|
||||
@@ -284,7 +320,7 @@ namespace YY.Admin.Core.SqlSugar
|
||||
return connectionString;
|
||||
}
|
||||
|
||||
// Program Files 等安装目录对普通用户只读;SQLite 库放到 LocalApplicationData
|
||||
// Program Files 等安装目录对普通用户只读;运行期 SQLite 放到 LocalApplicationData(首启可由 TrySeedSqliteFromInstallDirectory 从安装目录拷贝模板)
|
||||
var dataDir = AppWritablePaths.EnsureDirectoryExists(AppWritablePaths.DataDirectory);
|
||||
var fileName = Path.GetFileName(ds.TrimStart('.', '/', '\\'));
|
||||
if (string.IsNullOrWhiteSpace(fileName))
|
||||
|
||||
Reference in New Issue
Block a user