将Tcl应用程序安装为Windows服务错误

时间:2016-03-17 20:27:54

标签: windows-services tcl tcldevkit

我尝试使用TclDevKit的TclServiceManager在我的Windows机器上安装Tcl程序作为服务。我一步一步地遵循指南here,但我遇到了很多问题。

如果我尝试使用我的原始.tcl文件来创建服务,我会收到以下错误:

Error 1053: The service did not respond to the start or control request in a timely fashion.

我已经按照此问题here的解决方案为程序提供了更多时间在服务控制管理器终止之前启动;无济于事。

然后我决定尝试使用TclApp包装程序,看看是否有效。与指南一样,我使用了位于我的TclDevKit bin目录中的base-tclsvc-win32-ix86.exe前缀文件。以这种方式安装服务,然后尝试运行它会导致以下错误:

Windows could not start the <service name> service on Local Computer.
Error 1067: The process terminated unexpectedly. 

根本没有太多信息我可以通过谷歌搜索这个错误。它上面唯一的Stackoverflow帖子是this一个。所以我尝试使用<TheProgram>.exe <Service Name> -install通过命令提示符手动安装服务并尝试运行它 - 仍然给了我同样的错误。

然后我尝试通过运行<TheProgram>.exe <Service Name> -debug来查看是否可以获得任何有用的信息,有趣的是我得到了以下输出:

Debugging <Service Name>. 
InitTypes: failed to find the DictUpdateInfo AuxData type

abnormal program termination

谷歌搜索InitTypes: failed to find the DictUpdateInfo AuxData type导致我无处可去,但它似乎与Tcl有关。

最后,如果它意味着什么,我试图作为服务安装的程序的源代码是一些简单的Web服务器代码:

proc Serve {chan addr port} {
    fconfigure $chan -translation auto -buffering line 
    set line [gets $chan]
    set path [file join . [string trimleft [lindex $line 1] /]]
    if {$path == "."} {set path ./index.html}

    if {[catch {
        set f1 [open $path]
    } err]} {
        puts $chan "HTTP/1.0 404 Not Found"
    } else {
        puts $chan "HTTP/1.0 200 OK"
        puts $chan "Content-Type: text/html"
        puts $chan ""
        puts $chan [read $f1]
        close $f1
    }

    close $chan
}

if {![info exists reload]} {
    set sk [socket -server Serve 3000]
    puts "Server listening on port 3000"
    vwait forever
} else {
    unset reload
}

要检查并查看源代码是否存在问题,我尝试了另一个更简单的示例,它只是在特定目录中创建了一个文件:

set filePath "C:/some/path/here";
set fileName "Test.txt";

set file [open [file join $filePath $fileName] w];
puts $file "Hello, World";

close $file;

如果您只是从tclsh86.exe中获取它们,那么这两个程序都可以工作,但如果您尝试将它们分别作为解包和包装的服务运行,则会出现上述错误。

有什么想法吗?

0 个答案:

没有答案