Compare commits
2 Commits
83ff7d77b9
...
a175159f5d
Author | SHA1 | Date |
---|---|---|
|
a175159f5d | |
|
92bc551302 |
|
@ -21,7 +21,7 @@
|
|||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.14.1" />
|
||||
<PackageReference Include="NewLife.Redis" Version="6.3.2025.701" />
|
||||
<PackageReference Include="NewLife.Redis" Version="6.3.2025.801" />
|
||||
<PackageReference Include="NewLife.UnitTest" Version="1.0.2025.101" />
|
||||
<PackageReference Include="xunit" Version="2.9.3" />
|
||||
<PackageReference Include="xunit.runner.visualstudio" Version="3.1.3">
|
||||
|
|
|
@ -20,7 +20,7 @@
|
|||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="NewLife.XCode" Version="11.19.2025.717-beta0003" />
|
||||
<PackageReference Include="NewLife.XCode" Version="11.20.2025.801" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
|
|
@ -18,7 +18,7 @@
|
|||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="NewLife.Core" Version="11.5.2025.717-beta0001" />
|
||||
<PackageReference Include="NewLife.Core" Version="11.6.2025.801" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
|
|
@ -18,7 +18,7 @@
|
|||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="NewLife.Core" Version="11.5.2025.717-beta0001" />
|
||||
<PackageReference Include="NewLife.Core" Version="11.6.2025.801" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
|
|
@ -94,12 +94,13 @@
|
|||
<Column Name="FileName" DataType="String" Description="文件。应用启动文件,可直接使用zip包,支持差异定制,为空时使用应用集配置" Category="发布参数" />
|
||||
<Column Name="Arguments" DataType="String" Length="500" Description="参数。启动应用的参数,为空时使用应用集配置" Category="发布参数" />
|
||||
<Column Name="WorkingDirectory" DataType="String" Length="200" Description="工作目录。应用根目录,为空时使用应用集配置" Category="发布参数" />
|
||||
<Column Name="UserName" DataType="String" Description="用户名。以该用户执行应用" Category="发布参数" />
|
||||
<Column Name="Environments" DataType="String" Length="500" Description="环境变量。启动应用前设置的环境变量" Category="发布参数" />
|
||||
<Column Name="Mode" DataType="Int32" Description="工作模式。0默认exe/zip;1仅解压;2解压后运行;3仅运行一次;4多实例exe/zip。为空时使用应用集配置" Type="Stardust.Models.ServiceModes" Category="发布参数" />
|
||||
<Column Name="Delay" DataType="Int32" Description="延迟。批量发布时,需要延迟执行的时间,用于滚动发布,单位秒" Category="发布参数" />
|
||||
<Column Name="ProcessId" DataType="Int32" Description="进程" Category="状态" />
|
||||
<Column Name="UserName" DataType="String" Description="用户名。启动该进程的用户名" Category="状态" />
|
||||
<Column Name="ProcessName" DataType="String" Length="200" Description="进程名称" Category="状态" />
|
||||
<Column Name="ProcessUser" DataType="String" Description="进程用户。启动该进程的用户名" Category="状态" />
|
||||
<Column Name="StartTime" DataType="DateTime" Description="进程时间" Category="状态" />
|
||||
<Column Name="Version" DataType="String" Description="版本。客户端" Category="状态" />
|
||||
<Column Name="Compile" DataType="DateTime" Description="编译时间。客户端" Category="状态" />
|
||||
|
|
|
@ -561,6 +561,17 @@
|
|||
<td>应用根目录,为空时使用应用集配置</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>UserName</td>
|
||||
<td>用户名</td>
|
||||
<td>String</td>
|
||||
<td>50</td>
|
||||
<td></td>
|
||||
<td></td>
|
||||
<td></td>
|
||||
<td>以该用户执行应用</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>Environments</td>
|
||||
<td>环境变量</td>
|
||||
|
@ -605,17 +616,6 @@
|
|||
<td></td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>UserName</td>
|
||||
<td>用户名</td>
|
||||
<td>String</td>
|
||||
<td>50</td>
|
||||
<td></td>
|
||||
<td></td>
|
||||
<td></td>
|
||||
<td>启动该进程的用户名</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>ProcessName</td>
|
||||
<td>进程名称</td>
|
||||
|
@ -627,6 +627,17 @@
|
|||
<td></td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>ProcessUser</td>
|
||||
<td>进程用户</td>
|
||||
<td>String</td>
|
||||
<td>50</td>
|
||||
<td></td>
|
||||
<td></td>
|
||||
<td></td>
|
||||
<td>启动该进程的用户名</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>StartTime</td>
|
||||
<td>进程时间</td>
|
||||
|
|
|
@ -180,6 +180,7 @@ public partial class AppDeployNode : Entity<AppDeployNode>
|
|||
Arguments = Arguments,
|
||||
Environments = Environments,
|
||||
WorkingDirectory = WorkingDirectory,
|
||||
UserName = UserName,
|
||||
|
||||
Enable = app.Enable && Enable,
|
||||
//AutoStart = app.AutoStart,
|
||||
|
@ -203,8 +204,8 @@ public partial class AppDeployNode : Entity<AppDeployNode>
|
|||
{
|
||||
ProcessId = inf.Id;
|
||||
ProcessName = inf.Name;
|
||||
ProcessUser = inf.UserName;
|
||||
Version = inf.Version;
|
||||
UserName = inf.UserName;
|
||||
StartTime = inf.StartTime;
|
||||
Listens = inf.Listens;
|
||||
}
|
||||
|
@ -214,7 +215,7 @@ public partial class AppDeployNode : Entity<AppDeployNode>
|
|||
IP = online.IP;
|
||||
ProcessId = online.ProcessId;
|
||||
ProcessName = online.ProcessName;
|
||||
UserName = online.UserName;
|
||||
ProcessUser = online.UserName;
|
||||
StartTime = online.StartTime;
|
||||
Listens = online.Listens;
|
||||
Version = online.Version;
|
||||
|
|
|
@ -106,6 +106,15 @@ public partial class AppDeployNode
|
|||
[BindColumn("WorkingDirectory", "工作目录。应用根目录,为空时使用应用集配置", "")]
|
||||
public String WorkingDirectory { get => _WorkingDirectory; set { if (OnPropertyChanging("WorkingDirectory", value)) { _WorkingDirectory = value; OnPropertyChanged("WorkingDirectory"); } } }
|
||||
|
||||
private String _UserName;
|
||||
/// <summary>用户名。以该用户执行应用</summary>
|
||||
[Category("发布参数")]
|
||||
[DisplayName("用户名")]
|
||||
[Description("用户名。以该用户执行应用")]
|
||||
[DataObjectField(false, false, true, 50)]
|
||||
[BindColumn("UserName", "用户名。以该用户执行应用", "")]
|
||||
public String UserName { get => _UserName; set { if (OnPropertyChanging("UserName", value)) { _UserName = value; OnPropertyChanged("UserName"); } } }
|
||||
|
||||
private String _Environments;
|
||||
/// <summary>环境变量。启动应用前设置的环境变量</summary>
|
||||
[Category("发布参数")]
|
||||
|
@ -142,15 +151,6 @@ public partial class AppDeployNode
|
|||
[BindColumn("ProcessId", "进程", "")]
|
||||
public Int32 ProcessId { get => _ProcessId; set { if (OnPropertyChanging("ProcessId", value)) { _ProcessId = value; OnPropertyChanged("ProcessId"); } } }
|
||||
|
||||
private String _UserName;
|
||||
/// <summary>用户名。启动该进程的用户名</summary>
|
||||
[Category("状态")]
|
||||
[DisplayName("用户名")]
|
||||
[Description("用户名。启动该进程的用户名")]
|
||||
[DataObjectField(false, false, true, 50)]
|
||||
[BindColumn("UserName", "用户名。启动该进程的用户名", "")]
|
||||
public String UserName { get => _UserName; set { if (OnPropertyChanging("UserName", value)) { _UserName = value; OnPropertyChanged("UserName"); } } }
|
||||
|
||||
private String _ProcessName;
|
||||
/// <summary>进程名称</summary>
|
||||
[Category("状态")]
|
||||
|
@ -160,6 +160,15 @@ public partial class AppDeployNode
|
|||
[BindColumn("ProcessName", "进程名称", "")]
|
||||
public String ProcessName { get => _ProcessName; set { if (OnPropertyChanging("ProcessName", value)) { _ProcessName = value; OnPropertyChanged("ProcessName"); } } }
|
||||
|
||||
private String _ProcessUser;
|
||||
/// <summary>进程用户。启动该进程的用户名</summary>
|
||||
[Category("状态")]
|
||||
[DisplayName("进程用户")]
|
||||
[Description("进程用户。启动该进程的用户名")]
|
||||
[DataObjectField(false, false, true, 50)]
|
||||
[BindColumn("ProcessUser", "进程用户。启动该进程的用户名", "")]
|
||||
public String ProcessUser { get => _ProcessUser; set { if (OnPropertyChanging("ProcessUser", value)) { _ProcessUser = value; OnPropertyChanged("ProcessUser"); } } }
|
||||
|
||||
private DateTime _StartTime;
|
||||
/// <summary>进程时间</summary>
|
||||
[Category("状态")]
|
||||
|
@ -305,12 +314,13 @@ public partial class AppDeployNode
|
|||
"FileName" => _FileName,
|
||||
"Arguments" => _Arguments,
|
||||
"WorkingDirectory" => _WorkingDirectory,
|
||||
"UserName" => _UserName,
|
||||
"Environments" => _Environments,
|
||||
"Mode" => _Mode,
|
||||
"Delay" => _Delay,
|
||||
"ProcessId" => _ProcessId,
|
||||
"UserName" => _UserName,
|
||||
"ProcessName" => _ProcessName,
|
||||
"ProcessUser" => _ProcessUser,
|
||||
"StartTime" => _StartTime,
|
||||
"Version" => _Version,
|
||||
"Compile" => _Compile,
|
||||
|
@ -341,12 +351,13 @@ public partial class AppDeployNode
|
|||
case "FileName": _FileName = Convert.ToString(value); break;
|
||||
case "Arguments": _Arguments = Convert.ToString(value); break;
|
||||
case "WorkingDirectory": _WorkingDirectory = Convert.ToString(value); break;
|
||||
case "UserName": _UserName = Convert.ToString(value); break;
|
||||
case "Environments": _Environments = Convert.ToString(value); break;
|
||||
case "Mode": _Mode = (Stardust.Models.ServiceModes)value.ToInt(); break;
|
||||
case "Delay": _Delay = value.ToInt(); break;
|
||||
case "ProcessId": _ProcessId = value.ToInt(); break;
|
||||
case "UserName": _UserName = Convert.ToString(value); break;
|
||||
case "ProcessName": _ProcessName = Convert.ToString(value); break;
|
||||
case "ProcessUser": _ProcessUser = Convert.ToString(value); break;
|
||||
case "StartTime": _StartTime = value.ToDateTime(); break;
|
||||
case "Version": _Version = Convert.ToString(value); break;
|
||||
case "Compile": _Compile = value.ToDateTime(); break;
|
||||
|
@ -411,6 +422,9 @@ public partial class AppDeployNode
|
|||
/// <summary>工作目录。应用根目录,为空时使用应用集配置</summary>
|
||||
public static readonly Field WorkingDirectory = FindByName("WorkingDirectory");
|
||||
|
||||
/// <summary>用户名。以该用户执行应用</summary>
|
||||
public static readonly Field UserName = FindByName("UserName");
|
||||
|
||||
/// <summary>环境变量。启动应用前设置的环境变量</summary>
|
||||
public static readonly Field Environments = FindByName("Environments");
|
||||
|
||||
|
@ -423,12 +437,12 @@ public partial class AppDeployNode
|
|||
/// <summary>进程</summary>
|
||||
public static readonly Field ProcessId = FindByName("ProcessId");
|
||||
|
||||
/// <summary>用户名。启动该进程的用户名</summary>
|
||||
public static readonly Field UserName = FindByName("UserName");
|
||||
|
||||
/// <summary>进程名称</summary>
|
||||
public static readonly Field ProcessName = FindByName("ProcessName");
|
||||
|
||||
/// <summary>进程用户。启动该进程的用户名</summary>
|
||||
public static readonly Field ProcessUser = FindByName("ProcessUser");
|
||||
|
||||
/// <summary>进程时间</summary>
|
||||
public static readonly Field StartTime = FindByName("StartTime");
|
||||
|
||||
|
@ -507,6 +521,9 @@ public partial class AppDeployNode
|
|||
/// <summary>工作目录。应用根目录,为空时使用应用集配置</summary>
|
||||
public const String WorkingDirectory = "WorkingDirectory";
|
||||
|
||||
/// <summary>用户名。以该用户执行应用</summary>
|
||||
public const String UserName = "UserName";
|
||||
|
||||
/// <summary>环境变量。启动应用前设置的环境变量</summary>
|
||||
public const String Environments = "Environments";
|
||||
|
||||
|
@ -519,12 +536,12 @@ public partial class AppDeployNode
|
|||
/// <summary>进程</summary>
|
||||
public const String ProcessId = "ProcessId";
|
||||
|
||||
/// <summary>用户名。启动该进程的用户名</summary>
|
||||
public const String UserName = "UserName";
|
||||
|
||||
/// <summary>进程名称</summary>
|
||||
public const String ProcessName = "ProcessName";
|
||||
|
||||
/// <summary>进程用户。启动该进程的用户名</summary>
|
||||
public const String ProcessUser = "ProcessUser";
|
||||
|
||||
/// <summary>进程时间</summary>
|
||||
public const String StartTime = "StartTime";
|
||||
|
||||
|
|
|
@ -41,7 +41,7 @@
|
|||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="NewLife.XCode" Version="11.19.2025.717-beta0003" />
|
||||
<PackageReference Include="NewLife.XCode" Version="11.20.2025.801" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
|
|
@ -46,8 +46,8 @@
|
|||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="NewLife.IP" Version="2.3.2025.601" />
|
||||
<PackageReference Include="NewLife.Redis" Version="6.3.2025.701" />
|
||||
<PackageReference Include="NewLife.Remoting.Extensions" Version="3.4.2025.722-beta0820" />
|
||||
<PackageReference Include="NewLife.Redis" Version="6.3.2025.801" />
|
||||
<PackageReference Include="NewLife.Remoting.Extensions" Version="3.4.2025.801" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
|
|
@ -52,8 +52,8 @@
|
|||
<ItemGroup>
|
||||
<PackageReference Include="NewLife.Cube.Core" Version="6.5.2025.715-beta1654" />
|
||||
<PackageReference Include="NewLife.IP" Version="2.3.2025.601" />
|
||||
<PackageReference Include="NewLife.Redis" Version="6.3.2025.701" />
|
||||
<PackageReference Include="NewLife.Remoting.Extensions" Version="3.4.2025.722-beta0820" />
|
||||
<PackageReference Include="NewLife.Redis" Version="6.3.2025.801" />
|
||||
<PackageReference Include="NewLife.Remoting.Extensions" Version="3.4.2025.801" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
|
|
@ -401,15 +401,15 @@ public class ServiceController : DisposeBase
|
|||
}
|
||||
|
||||
// 指定用户时,以特定用户启动进程
|
||||
if (!service.UserName.IsNullOrEmpty())
|
||||
var user = service.UserName;
|
||||
if (!user.IsNullOrEmpty())
|
||||
{
|
||||
si.UserName = service.UserName;
|
||||
si.UserName = user;
|
||||
//si.UseShellExecute = false;
|
||||
|
||||
// 在Linux系统中,改变目录所属用户
|
||||
if (Runtime.Linux)
|
||||
{
|
||||
var user = service.UserName;
|
||||
if (!user.Contains(':')) user = $"{user}:{user}";
|
||||
//Process.Start("chown", $"-R {user} {si.WorkingDirectory}");
|
||||
Process.Start("chown", $"-R {user} {si.WorkingDirectory.CombinePath("../").GetBasePath()}").WaitForExit(5_000);
|
||||
|
@ -438,19 +438,19 @@ public class ServiceController : DisposeBase
|
|||
Process? p = null;
|
||||
|
||||
// Windows桌面用户运行
|
||||
if (Runtime.Windows && (service.UserName == "$" || service.UserName == "$$"))
|
||||
if (Runtime.Windows && (user == "$" || user == "$$"))
|
||||
{
|
||||
// 交互模式直接运行
|
||||
if (Environment.UserInteractive)
|
||||
{
|
||||
si.UserName = null;
|
||||
si.UserName = null!;
|
||||
p = Process.Start(si);
|
||||
}
|
||||
else
|
||||
{
|
||||
// 桌面用户运行
|
||||
var desktop = new Desktop { Log = Log };
|
||||
var pid = desktop.StartProcess(si.FileName, si.Arguments, si.WorkingDirectory, service.UserName == "$$", true);
|
||||
var pid = desktop.StartProcess(si.FileName, si.Arguments, si.WorkingDirectory, user == "$$", true);
|
||||
p = Process.GetProcessById((Int32)pid);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -32,7 +32,7 @@
|
|||
<RepositoryUrl>https://github.com/NewLifeX/Stardust</RepositoryUrl>
|
||||
<RepositoryType>git</RepositoryType>
|
||||
<PackageTags>新生命团队;X组件;NewLife;$(AssemblyName)</PackageTags>
|
||||
<PackageReleaseNotes>优化发布子系统;发布时支持应用nginx配置</PackageReleaseNotes>
|
||||
<PackageReleaseNotes>增加网络质量监控</PackageReleaseNotes>
|
||||
<PackageLicenseExpression>MIT</PackageLicenseExpression>
|
||||
<PublishRepositoryUrl>true</PublishRepositoryUrl>
|
||||
<EmbedUntrackedSources>true</EmbedUntrackedSources>
|
||||
|
@ -119,10 +119,10 @@
|
|||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="NewLife.Remoting" Version="3.4.2025.722-beta0820" />
|
||||
<PackageReference Include="NewLife.Remoting" Version="3.4.2025.801" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<PackageReference Include="NewLife.Core" Version="11.5.2025.717-beta0001" />
|
||||
<PackageReference Include="NewLife.Core" Version="11.6.2025.801" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
|
|
@ -33,7 +33,7 @@
|
|||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="NewLife.Core" Version="11.5.2025.717-beta0001" />
|
||||
<PackageReference Include="NewLife.Core" Version="11.6.2025.801" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
|
Loading…
Reference in New Issue