我一直在努力在Haskell中编写Windows服务应用程序.
服务应用程序由Windows服务控制管理器执行.启动后,它会对StartServiceCtrlDispatcher进行阻塞调用,该调用提供了一个回调函数,用作服务的主函数.
该服务的主要功能是注册第二个回调来处理传入的命令,如启动,停止,继续等.它通过调用RegisterServiceCtrlHandler来完成.
我能够编写一个注册服务主函数的程序.然后,我可以将程序安装为Windows服务,并从服务管理控制台启动它.该服务能够启动,将自身报告为正在运行,然后等待传入的请求.
问题是我无法调用我的服务处理函数.查询服务状态显示它正在运行,但是一旦我发送"停止"命令,窗口会弹出一条消息说:
Windows could not stop the Test service on Local Computer.
Error 1061: The service cannot accept control messages at this time.
Run Code Online (Sandbox Code Playgroud)
根据MSDN文档,StartServiceCtrlDispatcher函数会阻塞,直到所有服务报告它们已停止.在调用服务主函数之后,调度程序线程应该等到服务控制管理器发送命令,此时应该由该线程调用处理函数.
以下是我正在尝试做的非常简化的版本,但它演示了我的处理程序函数未被调用的问题.
首先,一些名称和进口:
module Main where
import Control.Applicative
import Foreign
import System.Win32
wIN32_OWN_PROCESS :: DWORD
wIN32_OWN_PROCESS = 0x00000010
sTART_PENDING, rUNNING :: DWORD
sTART_PENDING = 0x00000002
rUNNING = 0x00000004
aCCEPT_STOP, aCCEPT_NONE :: DWORD
aCCEPT_STOP = 0x00000001
aCCEPT_NONE = 0x00000000
nO_ERROR …Run Code Online (Sandbox Code Playgroud) 我使用AngularJS和GAE(Google App Engine - Java)创建了一个应用程序.
我想转换它与SEO兼容.
<meta name="fragment" content="!" /><base href="/"> 并且身体通过动态加载<div ui-view></div>.
$locationProvider.html5Mode(true);
网址工作正常,但当我刷新页面时,我收到404错误.
你有什么想法,这是什么原因造成的?
我是Powershell的新手,我想知道是否有人知道有任何更好的方法来完成以下示例问题.
我有一个从IP地址到主机名的映射数组.这表示活动DHCP租约列表:
PS H:\> $leases
IP Name
-- ----
192.168.1.1 Apple
192.168.1.2 Pear
192.168.1.3 Banana
192.168.1.99 FishyPC
Run Code Online (Sandbox Code Playgroud)
我有另一个从MAC地址到IP地址的映射数组.这代表了IP预订列表:
PS H:\> $reservations
IP MAC
-- ---
192.168.1.1 001D606839C2
192.168.1.2 00E018782BE1
192.168.1.3 0022192AF09C
192.168.1.4 0013D4352A0D
Run Code Online (Sandbox Code Playgroud)
为方便起见,我能够使用以下代码生成从MAC地址到IP地址和主机名的第三个映射数组.我们的想法是$reservations应该获得第三个字段"Name",只要有匹配的"IP"字段就填充该字段:
$reservations = $reservations | foreach {
$res = $_
$match = $leases | where {$_.IP -eq $res.IP} | select -unique
if ($match -ne $NULL) {
"" | select @{n="IP";e={$res.IP}}, @{n="MAC";e={$res.MAC}}, @{n="Name";e={$match.Name}}
}
}
Run Code Online (Sandbox Code Playgroud)
所需的输出是这样的:
PS H:\> $ideal
IP MAC Name
-- --- ----
192.168.1.1 …Run Code Online (Sandbox Code Playgroud) 问题
我正在使用LilyPond为教堂合唱团排版乐谱.根据任何给定周的人数,歌曲将以各种键播放.我们有一位出色的钢琴演奏家可以演奏我们扔在她身上的任何东西,吉他手通常会以交替的和弦方式画笔,但我希望通过在我们想要的任何键上提供精美排版的乐谱来让事情变得更轻松.
所以说我们要唱我们的ABC.首先,我将采用任何可用的源代码转换并将其输入LilyPond脚本:
melody = \relative c' {
c c g g
a a g2
f f e e
d d c2 }
Run Code Online (Sandbox Code Playgroud)
我希望能够自动转置它,所以如果我想要'G'中的整个内容我将这首歌包装在\ transpose调用中,如下所示:
melody = \transpose c g \relative c' {
c c g g
a a g2
f f e e
d d c2 }
Run Code Online (Sandbox Code Playgroud)
我真正想要的是用'g'替换某些东西并多次为旋律生成输出.简单的LilyPond变量似乎在这里不起作用,到目前为止,我在定义一个方案函数时没有成功.
我暂时使用的是获取上述文件,将其称为twinkle.ly并将其转换为名为twinkle.ly.m4的M4脚本,其内容如下所示:
melody = \transpose c _key \relative c' {
c c g g
a a g2
f f e e
d d c2 }
Run Code Online (Sandbox Code Playgroud)
然后我通过执行以下行来编译while事物:
> m4 -D _key=g …Run Code Online (Sandbox Code Playgroud) 我有一个项目取决于iconv,因为我需要使用cp1251代码页.这是问题项目的最小实现.我从这里安装了iconv 并成功安装了像这样的haskell软件包"iconv"
cabal install iconv --extra-include-dirs="C:\GnuWin32\include" --extra-lib-dirs="C:\GnuWin32\lib"
Run Code Online (Sandbox Code Playgroud)
软件包iconv已正确安装,但依赖于它的项目在链接时失败,以下是正在进行的操作.
c:\iconvsmpl>cabal configure --extra-include-dirs="C:\GnuWin32\include" --extra-
lib-dirs="C:\GnuWin32\lib"
Warning: The package list for 'hackage.haskell.org' is 16 days old.
Run 'cabal update' to get the latest list of available packages.
Resolving dependencies...
Configuring iconvsmpl-0.1.0.0...
Warning: The 'license-file' field refers to the file 'LICENSE' which does not
exist.
c:\iconvsmpl>cabal build
Building iconvsmpl-0.1.0.0...
Preprocessing executable 'iconvsmpl' for iconvsmpl-0.1.0.0...
[1 of 1] Compiling Main ( iconvsmpl.hs, dist\build\iconvsmpl\iconvsm
pl-tmp\Main.o )
Linking dist\build\iconvsmpl\iconvsmpl.exe ...
C:\Users\admin\AppData\Roaming\cabal\iconv-0.4.1.1\ghc-7.6.3/libHSiconv-0.4.1.1.
a(hsiconv.o):hsiconv.c:(.text+0x7): undefined …Run Code Online (Sandbox Code Playgroud)