在你问之前,是的,我在这个问题上进行了搜索和搜索,尝试了其他人为他们工作的事情并没有提出任何建议。我试过了:
我的项目摘要是一项Windows服务,它扫描源文件夹中的文件并在设定的时间转换它们并将它们放在目标文件夹中。可以在GUI中更改这些设置,以更改服务定期扫描的XML文件。
成品包装在InstallShield中。一切都在VisualStudio中运行。我可以安装该程序,服务可以正常运行。当我使用我的发布版本并将其自己安装在同一台机器上时,我收到了1053错误。
这是我的OnStart
protected override void OnStart(string[] args)
{
// Update the service state to Start Pending.
ServiceStatus serviceStatus = new ServiceStatus();
serviceStatus.dwCurrentState = ServiceState.SERVICE_START_PENDING;
serviceStatus.dwWaitHint = 100000;
SetServiceStatus( this.ServiceHandle, ref serviceStatus );
// Set up a timer to trigger every 30s
System.Threading.Thread t1 = new System.Threading.Thread( new System.Threading.ThreadStart( this.InitTimer ) );
t1.Start();
// Set folders and time from xml
System.Threading.Thread t2 = new System.Threading.Thread( new System.Threading.ThreadStart( this.InitSettings ) );
t2.Start();
// Update the service state to Running.
eventLog1.WriteEntry( "Service successfully started", EventLogEntryType.Information, eventId++ );
serviceStatus.dwCurrentState = ServiceState.SERVICE_RUNNING;
SetServiceStatus( this.ServiceHandle, ref serviceStatus );
}
这是我的主要
public WTVService(string[] args)
{
InitializeComponent();
string eventSourceName = "Searcher";
string logName = "WTVConverter";
if ( args.Count() > 0 )
{
eventSourceName = args[0];
}
if ( args.Count() > 1 )
{
logName = args[1];
}
eventLog1 = new EventLog();
if ( !EventLog.SourceExists( eventSourceName ) )
{
EventLog.CreateEventSource( eventSourceName, logName );
}
eventLog1.Source = eventSourceName; eventLog1.Log = logName;
}
让我知道其他信息可能会有所帮助。
编辑:此外,如果它有所不同,错误会立即出现,而不是在假定的30秒超时规则之后出现。
答案 0 :(得分:0)
所以这很有趣。我确信InstallShield的人群有点受限,但这可能对某人有所帮助。最终工作的是将构建模式从SingleImage更改为DVD-5 。我不知道为什么,但它现在完美无缺。我在一台从未运行过我的程序的机器上进行过测试,但一切正常。
答案 1 :(得分:0)
当您通过InstallShield部署任何服务时,您需要选择LocalSystem用户名或管理员用户凭据。
对于任何Windows服务的执行,它需要Admin用户或LocalSystem用户。
因此,在InstallShield中提供了一个servive的用户凭证。