我用Delphi为客户端服务器应用程序创建了一个Windows服务.
要安装它,我使用
c:\Test\MyService.exe /install (or /uninstall)
Run Code Online (Sandbox Code Playgroud)
这将安装该服务,并在Windows服务中列出"MyService"名称和空描述.
如何定义不同的名称并插入描述(在运行时可以看到services.msc)?
注意:我需要这个,因为在同一台机器上我需要安装更多次相同的服务(每个数据库1个).
目前我唯一的解决方法是重命名服务exe,但我更愿意找到正确的命令行方式(因为我这样做ShellExecute).
更新:不知怎的,我会寻找类似的东西(这当然只是出于解释原因! - InstallService.exe是我刚刚发明的名字):
InstallService.exe c:\Test\MyService.exe /install /name='MyService1'
/description='This is my service for database 1'
Run Code Online (Sandbox Code Playgroud)
而且更紧凑的版本会很好:
c:\Test\MyService.exe /install /name='MyService1'
/description='This is my service for database 1'
Run Code Online (Sandbox Code Playgroud) 在Delphi中,我使用ShellExecute多年来启动(并可选择等待)其他应用程序.现在,我需要在我的一个Delphi应用程序表单中显示其中一个应用程序.我已经尝试了下面的代码作为一个简单的测试来打开记事本(它确实如此)并在我的表单上显示PAnel1中的结果(它没有).有些人可以让我走上正轨吗?谢谢
var
Rec : TShellExecuteInfo;
wnd : HWnd;
const
AVerb = 'open';
AParams = '';
AFileName = 'Notepad.exe';
ADir = '';
begin
FillChar(Rec, SizeOf(Rec), #0);
Rec.cbSize := SizeOf(Rec);
Rec.fMask := SEE_MASK_NOCLOSEPROCESS;
Rec.lpVerb := PChar( AVerb );
Rec.lpFile := PChar( AfileName );
Rec.lpParameters := PChar( AParams );
Rec.lpDirectory := PChar( Adir );
Rec.nShow := sw_Show;
ShellExecuteEx(@Rec);
wnd := Windows.FindWindow( 'Notepad', nil );
Windows.SetParent( Wnd, PAnel1.Handle );
end;
Run Code Online (Sandbox Code Playgroud) 我有一个Delphi控制台应用程序,最终需要启动两个应用程序之一.
我遇到一些问题让ShellExecute无错误地工作,我认为问题与没有控制台应用程序的句柄有关.
引起我悲伤的一句话是:
ShellExecute(0, 'open', 'someapplication.exe', nil, nil, SW_SHOWNORMAL);
Run Code Online (Sandbox Code Playgroud)
我认为句柄中的0是问题,因为它编译好并在调试器中运行OK,但如果我尝试运行可执行文件,我会得到一个未处理的错误(控制台应用程序认为它已经结束了).
Linux似乎很简单:xdg-open <file/directory/URL>.
显然,Mac是相似的:open应该用来代替xdg-open.我无法访问Mac,因此无法测试它.
对于Windows,我发现了4个不同的建议,而我尝试过的建议失败了.
是否有非java,跨平台的方式来启动某个文件类型的关联应用程序?
提示start
如何从Java开始关注shell打开文件的默认程序?提示
cmd /c start ...
如何打开给定文件的用户系统首选编辑器?
如何使用Java查找默认文件打开程序?
建议
RUNDLL32.exe
什么是使用的ShellExecute(c)中打开.txt的正确方式
中的C++代码与Windows的本地程序打开文件
如何使用ShellExecute的用C在Windows中打开HTML文件++?建议
ShellExecute
我已经尝试的第一个3 system()和QProcess::startDetached(),并"http://www.stackoverflow.com"作为参数,但都失败了; start但是从命令行工作得很好.我还没有尝试过ShellExecute.
什么是Windows相当于xdg-open?在我看来,这是start为什么我的尝试start失败了?
是ShellExecute我唯一的选择吗?
编辑我认为QDesktopServices::openUrl()仅适用于网页,因为它不适用于文件或目录.
一些调试后,我想通了,如果我取代\\与/在Windows上的路径,它适用于文件,但该目录还没有打开.我有什么想法我做错了吗?
QDir dir("C:/Documents and Settings/ali");
qDebug() << "Exists? " << dir.exists();
qDebug() << dir.absolutePath();
QDesktopServices::openUrl(QUrl(dir.absolutePath()));
qDebug() << …Run Code Online (Sandbox Code Playgroud) 我目前正在编写一个程序,它接受一个指定的文件并用它执行一些操作.目前,它打开它,和/或将其附加到电子邮件并将其邮寄到指定的地址.
该文件可以是以下格式:Excel,Excel报表,Word或PDF.
我目前正在做的是用文件的路径生成一个进程然后启动进程; 但是我也正在尝试修复我添加的错误功能,它根据指定的设置将动词"PrintTo"添加到启动信息中.
我想要完成的任务是我想打开文档,然后将自己打印到程序本身命名的指定打印机.然后,文件应自动关闭.
如果没有办法一般地执行此操作,我们可能能够为每种单独的文件类型提供一种方法.
这是我正在使用的代码:
ProcessStartInfo pStartInfo = new ProcessStartInfo();
pStartInfo.FileName = FilePath;
// Determine wether to just open or print
if (Print)
{
if (PrinterName != null)
{
// TODO: Add default printer.
}
pStartInfo.Verb = "PrintTo";
}
// Open the report file unless only set to be emailed.
if ((!Email && !Print) || Print)
{
Process p = Process.Start(pStartInfo);
}
Run Code Online (Sandbox Code Playgroud)
仍然难倒......可能会像微软那样称呼它,'那是设计'.
我没有找到在chrome.*API甚至实验中做到这一点的方法.它不会通过wscript运行,因此
ActiveXObject("Shell.Application")不允许.
我担心我唯一的选择是使用NPAPI建立一个dll,但我想知道是否有更简单的方法.
我正在尝试编写javascript,它应该运行带有指定命令行的cmd.exe,例如docs.google.com/file/d/0B7QHCoQDlEvKWUZSX3oxUDI2SDg/edit:
我在microsoft网站上阅读shellexecute方法后准备一个代码:
var objShell = new ActiveXObject("Shell.Application");
objShell.ShellExecute("cmd.exe", "C: cd C:\\pr main.exe blablafile.txt auto", "C:\\WINDOWS\\system32", "open", "1");
Run Code Online (Sandbox Code Playgroud)
但它不会在cmd.exe中插入命令行.
有人能帮助我吗?先感谢您.
使用以下内容
explorer.exe /select, "c:\path\to\file.txt"
Run Code Online (Sandbox Code Playgroud)
我可以打开Windows资源管理器并选择该文件.在Delphi中我这样选择"Parm"文件:
ShellExecute(Application.MainForm.Handle, 'OPEN', PChar('explorer.exe'), PChar('/select,"' + Parm + '"'), nil, SW_NORMAL);
Run Code Online (Sandbox Code Playgroud)
它有效.我的问题是这样的:如果我在最近打开的资源管理器中选择一个不同的文件(单击另一个文件),然后调用上面的代码,则不再选择"Parm"文件.有趣的是,有一些程序再次选择文件.例如,ITunes总是选择所需的文件.
有没有人知道如何让Explorer始终选择指定的文件?
在Vim中,读取shell命令输出的最佳(可移植和快速)方法是什么?此输出可能是二进制的,因此包含空值,并且(不)具有重要的尾随换行符.我看到当前的解决方案
system().问题:不适用于NULL.:read !.问题:不会保存尾随换行符,试图智能检测输出格式(dos/unix/mac).!重定向到临时文件,然后readfile(, "b")读取它.问题:对fs的两个调用,shellredir选项也默认重定向stderr并且它应该不那么可移植('shellredir'这里提到因为它可能被设置为有效值).system()和过滤输出xxd.问题:非常慢,最不便携(没有相当于'shellredir'管道).还有其他想法吗?
我有一个用C++编写的自定义应用程序,它控制连接到嵌入式系统的监视器上的分辨率和其他设置.有时系统无头启动并通过VNC运行,但可以在以后插入监视器(启动后).如果发生这种情况,则在启用监视器之前,监视器不会输入视频.我发现调用"displayswitch/clone"会启动监视器,但我需要知道监视器何时连接.我有一个每5秒运行一次的计时器并查找显示器,但是我需要一些API调用来告诉我显示器是否已连接.
这里有一些psudocode来描述我所追求的(当计时器每5秒到期时执行什么).
if(If monitor connected)
{
ShellExecute("displayswitch.exe /clone);
}else
{
//Do Nothing
}
Run Code Online (Sandbox Code Playgroud)
我试图GetSystemMetrics(SM_CMONITORS)返回监视器的数量,但如果监视器已连接,则返回1.还有其他想法吗?
谢谢!
shellexecute ×10
delphi ×3
c++ ×2
winapi ×2
c# ×1
cmd ×1
command-line ×1
console ×1
delphi-2010 ×1
javascript ×1
printers ×1
process ×1
qt ×1
setparent ×1
shell ×1
vim ×1
windows ×1