这是困扰我一段时间的事情,只需要解决这个问题.每次我调用ShellExecute来打开一个外部文件(无论是文档,可执行文件还是URL),这都会导致程序中的锁定很长,然后ShellExecute会生成新进程并返回.有谁知道如何解决或解决这个问题?
编辑:正如标签可能表明的那样,这是在使用C++的Win32上.
我使用ShellExecute命令运行exe文件,该文件获取输入文本文件并返回输出文本文件.我写得像这样:
ShellExecute(mainFormHandle, 'open', 'Test.exe',
'input.txt output.txt', nil, sw_shownormal);
//Read the output file...
S_List.LoadFromFile('output.txt');
Writeln(S_List[0])
Run Code Online (Sandbox Code Playgroud)
我在运行此命令之前提供了input.txt文件.在我的程序的每次运行中,输入文件都会更改,输出文件也会更改.
问题是这样的:我看不到输出文件中的变化!在控制台中写入的行来自上一个文件,而不是新更改的文件.我的意思是,浏览器中的文件已更改,但我读取的文件仍然是旧文件.
这看起来有点奇怪,但我想知道有没有办法在读取之前刷新输出文件?或者我在这里遗失了什么?
提前致谢.
我有一个调用其他程序的Perl脚本,即调用system
和/或exec
和/或open
使用管道和/或使用反引号运算符.
我是否可以运行此脚本,以便打印出上述每个参数的参数,以便我可以看到它调用的是什么?
例如像我这样的程序,我无法修改
#!/usr/bin/perl
sub get_arg {return "argument$_[0]";}
system "./foo", get_arg(1), get_arg(2);
print `./foo abc def`;
Run Code Online (Sandbox Code Playgroud)
调用了类似这样的东西
perl --shell-trace-on ./myscript.pl
在这种情况下输出
./foo argument1 argument2
./foo abc def
Run Code Online (Sandbox Code Playgroud)
抛弃myscript.pl的正常输出或将其与此跟踪混合是可以接受的.
非常感谢.
所以基本上当我尝试打开Windows默认使用Adobe Reader打开的PDF文件时,没有任何反应.如果我将默认程序设置为Internet Explorer,它可以工作..
这是我的代码
var
openDialog : TOpenDialog; // Open dialog variable
begin
openDialog := TOpenDialog.Create(self);
openDialog.InitialDir := MaskEditLocation.Text;
if openDialog.Execute then
ShellExecute(Handle, PChar('Open'), PChar(openDialog.FileName), nil, nil,
SW_SHOWNORMAL);
openDialog.Free;
end;
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
谢谢您的帮助!
我需要一个有循环的shell脚本.在每次循环迭代中,它需要使用一些参数调用PHP文件.有什么办法吗?
我有一个很老的程序,我无法控制.它启动一个文件类型及其默认应用程序(我无法修改此代码):
LET Err (SHELL_EXECUTE 'open' (FIX_MESG '"{1}"' File_name) '' '')
Run Code Online (Sandbox Code Playgroud)
^^上述代码有效,只要该文件类型与ClickOnce程序无关.
旧程序是32位,操作系统是Windows 7 64位.我可以将我的clickonce程序编译为任何东西,但似乎都没有.(我试过x86,x64和anyCPU)
如何使32位程序使用shell执行在64位操作系统上启动ClickOnce程序?
更多细节:这是一个可重现的错误.建立2个程序.程序1是Clickonce程序.将其与任何文件类型相关联.程序2将执行shell执行命令以打开与clickonce程序关联的任何文件类型.如果将程序2编译为x86,它将为您提供成功响应,但不执行任何操作.
控制台shell执行程序的测试代码:
private static void Main()
{
int value = ShellExecuteA(IntPtr.Zero, "open", @"C:\Users\bsee\Desktop\testfile.ecn2", "", "", 0);
if (value > 32)
MessageBox.Show("Clickonce reports success. But did it actually start?");
}
[DllImport("Shell32.dll")]
public static extern int ShellExecuteA(IntPtr hwnd, string lpOperation, string lpFile, string lpParameters, string lpDirecotry, int nShowCmd);
Run Code Online (Sandbox Code Playgroud) 我正在使用ShellExecute来运行外部应用程序如何判断外部应用程序何时结束?
在这里我的代码
theProgram := 'MySql.exe';
itsParameters := ' -u user1 -ppassword -e "create database abc"’;
rslt := ShellExecute(0, 'open',
pChar (theProgram),
pChar (itsParameters),
nil,
SW_SHOW);
Run Code Online (Sandbox Code Playgroud) 什么时候我编写以下代码行在任何app我使用delphi程序的任何地方
ShellExecute(self.WindowHandle,'open','www.yahoo.com',nil,nil, SW_SHOWNORMAL);
Run Code Online (Sandbox Code Playgroud)
kaspersky 2010发出此消息的''行为类似于pdm.hidden数据发送.检测'
为什么这样,我怎么摆脱这个
注意:我正在使用delphi 2007
更新:抱歉没有清除,当我运行我的程序av给我这个错误
如果我这样写:
ShellExecute(NULL, "open", "www.google.com", NULL, NULL, SW_SHOWNORMAL);
Run Code Online (Sandbox Code Playgroud)
一切都很好,而且必须如此。
但是,我希望用户可以输入他想去的链接。
std::cout<<"Enter the link: ";
char link;
std::cin>>link;
ShellExecute(NULL, "open", link, NULL, NULL, SW_SHOWNORMAL);
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我会得到一个invalid conversion from 'char' to 'const CHAR*
错误。
那么,有没有办法正确地做到这一点?
shellexecute ×10
delphi ×4
winapi ×3
c++ ×2
adobe-reader ×1
bash ×1
c# ×1
clickonce ×1
debugging ×1
delphi-2009 ×1
delphi-2010 ×1
hyperlink ×1
pdf ×1
perl ×1
php ×1
shell ×1
system-calls ×1
url ×1
windows ×1