我做了一个topshelf windows服务,启动三个任务.但是,由于可能会发生其中一个任务可能崩溃(是的,我知道EnableServiceRecovery),最好使用一个程序创建具有不同名称的 3个服务并使用命令行参数安装它们.
所以在理论上代码看起来像:
static void Main(string[] args)
{
// *********************Below is a TopShelf code*****************************//
HostFactory.Run(hostConfigurator =>
{
hostConfigurator.Service<MyService>(serviceConfigurator =>
{
serviceConfigurator.ConstructUsing(() => new MyService(args[0])); //what service we are using
serviceConfigurator.WhenStarted(myService => myService.Start()); //what to run on start
serviceConfigurator.WhenStopped(myService => myService.Stop()); // and on stop
});
hostConfigurator.RunAsLocalSystem();
//****************Change those names for other services*******************************************//
hostConfigurator.SetDisplayName("CallForwardService"+args[0]);
hostConfigurator.SetDescription("CallForward using Topshelf"+args[0]);
hostConfigurator.SetServiceName("CallForwardService"+args[0]);
hostConfigurator.SetInstanceName(args[0]);
});
}
Run Code Online (Sandbox Code Playgroud)
但当然它不会,因为(从我读过的)你不能简单地使用,args[]但显然你可以使用类似的东西
Callforward.exe install --servicename:CallForward --instancename:Workshop
Run Code Online (Sandbox Code Playgroud)
我仍然不确定如何传递稍后在程序中使用的参数(在上面的例子中你可以看到它new MyService(args[0])) - 这将是我的问题编号1.问题二(如标题中所示)将是"可以我使用单个参数来设置所有三个元素(名称,实例和内部使用)?
编辑:使用此答案的帮助 …
我刚刚使用UCMA 4.0创建了一个小型LYNC应用程序 - 它在我的本地计算机上运行良好但我在目标服务器上安装它时遇到问题.我已经用丢失的程序集进行了战斗并获胜,但仍无法正常运行程序:
System.IO.FileNotFoundExceptionL Could not load file or assembly SIPEPS.dll or one of its dependencies.
Run Code Online (Sandbox Code Playgroud)
好的 - 我发现一些帮助建议将发布更改为x64和.net框架为4.5,这很好,因为服务器仍然是64位...但这还没有解决问题:运行依赖检查器后我已经发现我失踪了 IESHIMS.DLL, MSCOREE.DLL and OLE32.DLL
等,OLE32?对于64位?
好吧,似乎我可以将它安装在其他计算机上,但不能安装在服务器上......很奇怪.
编辑:问题似乎与Windows Server 2008 R2一起显示,我可以在较新的系统上安装它而不会出现问题
我正在尝试创建一个按钮控制的宏来更改电子邮件的主题。遵循这个线程我设法想出了这个:
Public Sub Confidential()
Dim Item As Outlook.MailItem
Dim oInspector As Inspector
Dim strSubject As String
Set oInspector = Application.ActiveInspector
If oInspector Is Nothing Then
Set Item = Application.ActiveExplorer.Selection.Item(1)
Else
Set Item = oInspector.CurrentItem
End If
strSubject = Item.Subject
' Remove previous Confidential and Legally Privileged
strSubject = Replace(strSubject, "Confidential and Legally Privileged ", "")
' Prefix subject with Confidential and Legally Privileged
strSubject = "Confidential and Legally Privileged " & strSubject
' Set the message subject
Item.Subject …Run Code Online (Sandbox Code Playgroud) 在我的项目中,我尝试稍微整理一下结构并将所有 C# 类放到一个单独的文件夹 (App_Code) 中。
问题是,即使项目设置为使用 C# 7.1(和 .net framework 4.7)
在示例中尝试使用较新的语法在子文件夹类中创建:
Namespace MyProject {
public static class Class1
{ (//*****Available since C# 6.0****)
public static string Test1 { get; } = ConfigurationManager.AppSettings["User"];
public static int Test2 ()
{
string s = "10";
int.TryParse(s, out int y); //*****Available since C# 7.0
return y;
}
}
Run Code Online (Sandbox Code Playgroud)
这会导致编译错误,指出此功能需要版本 6.x(或 7.x 在上面的“Test2”的情况下)而不是 5.0。
Intelisense 提示我更改版本,但即使按照提示操作,错误仍然存在。
不确定这是否重要,但 App_Code 文件夹中的类与项目其余部分中的类具有相同的命名空间。
我使用 VS 2017 Pro。
我有一个日期时间选择器很少的表单,确切地说是两对日期和时间。

来自这些选择器的数据被合并并以 DateTime 格式保存到数据库中
16/05/2012 11:28:00 a.m.
Run Code Online (Sandbox Code Playgroud)
现在,我想做的是从数据库中获取值并将其放入日期时间选择器中。
我试过类似的东西
string plannedDate =(dbFunctions.SQLReadColumn("task", "PlannedDate", TaskID));
DateTime pDate = new DateTime(plannedDate.Substring(0,9);
dtpDatePicker.Value=pDate;
Run Code Online (Sandbox Code Playgroud)
其中plannedDate包含上述格式的字符串数据,但我无法将其转换为DateTime(第二行不正确)。有没有简单的方法来做到这一点,还是我必须将绳子切成年、月等的碎片?
我有两个表,我需要将TABLE_A中的两列复制到TABLE_B.到目前为止很容易:
insert into TABLE_B (col1,col2)
select (colA,colB)
from TABLE_A
Run Code Online (Sandbox Code Playgroud)
但是TABLE_B有几个NOT NULL列(col3和col4)必须用常量填充,所以我需要这样的东西:
insert into TABLE_B (col1,col2,col3,col4)
select (colA,colB)
from TABLE_A, values ('abc','123')
Run Code Online (Sandbox Code Playgroud)
但这显然不起作用