全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:7654
推到 Plurk!
推到 Facebook!

使用BCB開啟EXE執行檔

答題得分者是:boss.tw
5515531
一般會員


發表:19
回覆:44
積分:12
註冊:2008-04-16

發送簡訊給我
#1 引用回覆 回覆 發表時間:2009-02-12 17:40:24 IP:140.134.xxx.xxx 訂閱
我有看過討論區的一些文章
並加以修改~~
但是我嘗試了一下
卻沒有開啟我要的執行檔~~不知道是為什麼~~

[code cpp]
void __fastcall TForm1::Button1Click(TObject *Sender)
{
STARTUPINFO si;
PROCESS_INFORMATION pi;
LPTSTR szCmdline="smooth\\smooth.exe";
ZeroMemory( &si, sizeof(si) );
si.cb = sizeof(si);
ZeroMemory( &pi, sizeof(pi) );
// Start the child process.
if( !CreateProcess( NULL, // No module name (use command line)
szCmdline, // Command line
NULL, // Process handle not inheritable
NULL, // Thread handle not inheritable
FALSE, // Set handle inheritance to FALSE
0, // No creation flags
NULL, // Use parent's environment block
NULL, // Use parent's starting directory
&si, // Pointer to STARTUPINFO structure
&pi ) // Pointer to PROCESS_INFORMATION structure
)
{
ShowMessage(String("").cat_sprintf("CreateProcess failed (%d).\n", GetLastError()));
return;
}
// Wait until child process exits.
WaitForSingleObject( pi.hProcess, INFINITE );
// Close process and thread handles.
CloseHandle( pi.hProcess );
CloseHandle( pi.hThread );
}
[/code]
taishyang
站務副站長


發表:377
回覆:5485
積分:4552
註冊:2002-10-08

發送簡訊給我
#2 引用回覆 回覆 發表時間:2009-02-12 17:47:51 IP:118.169.xxx.xxx 訂閱
GetLastError() 結果是什麼?
ikk
尊榮會員


發表:4
回覆:413
積分:768
註冊:2003-06-30

發送簡訊給我
#3 引用回覆 回覆 發表時間:2009-02-12 17:48:34 IP:163.28.xxx.xxx 訂閱

[code cpp]
LPTSTR szCmdline="smooth\\smooth.exe";
[/code]

只有這樣的code會有個問題, 程式開始的位置可能是在別的路徑.
最好是指定完整路徑.
如取得目前Process的目錄.


[code cpp]
AnsiString exePath = ExtractFilePath(Application->ExeName);
[/code]
------
FPGA驗證, FPGA開發平台, http://smims.com
編輯記錄
ikk 重新編輯於 2009-02-12 17:49:40, 註解 無‧
boss.tw
高階會員


發表:15
回覆:109
積分:194
註冊:2005-05-17

發送簡訊給我
#4 引用回覆 回覆 發表時間:2009-02-12 18:37:35 IP:60.250.xxx.xxx 訂閱
我試了以下程式,可以正常運作,請參考
論壇 bug , &pi 會變成 π

[code cpp]
void __fastcall TForm1::Button1Click(TObject *Sender)
{
STARTUPINFO si ={0};
PROCESS_INFORMATION pi ={0};
LPTSTR szCmdline="project1.exe";
//ZeroMemory( &si, sizeof(si) );
si.cb = sizeof(si);
//eroMemory( pi , sizeof(pi) );
// Start the child process.
if( !CreateProcess( NULL, // No module name (use command line)
szCmdline, // Command line
NULL, // Process handle not inheritable
NULL, // Thread handle not inheritable
FALSE, // Set handle inheritance to FALSE
0, // No creation flags
NULL, // Use parent's environment block
NULL, // Use parent's starting directory
&si, // Pointer to STARTUPINFO structure
&pi ) // Pointer to PROCESS_INFORMATION structure
)
{
ShowMessage(String("").cat_sprintf("CreateProcess failed (%d).\n", GetLastError()));
return;
}
// Wait until child process exits.
WaitForSingleObject( pi.hProcess, INFINITE );
// Close process and thread handles.
CloseHandle( pi.hProcess );
CloseHandle( pi.hThread );
}

[/code]
編輯記錄
boss.tw 重新編輯於 2009-02-12 18:39:09, 註解 無‧
5515531
一般會員


發表:19
回覆:44
積分:12
註冊:2008-04-16

發送簡訊給我
#5 引用回覆 回覆 發表時間:2009-02-12 19:16:51 IP:140.134.xxx.xxx 訂閱

===================引 用 ikk 文 章===================

[code cpp]
LPTSTR szCmdline="smooth\\smooth.exe";
[/code]

只有這樣的code會有個問題, 程式開始的位置可能是在別的路徑.
最好是指定完整路徑.
如取得目前Process的目錄.


[code cpp]
AnsiString exePath = ExtractFilePath(Application->ExeName);
[/code]

不好意思~~我有在嘗試了一下

[code cpp]
LPTSTR szCmdline="G:\smooth\smooth.exe";
[/code]
但是出現了
CreateProcess failed(2)
的字樣~~
5515531
一般會員


發表:19
回覆:44
積分:12
註冊:2008-04-16

發送簡訊給我
#6 引用回覆 回覆 發表時間:2009-02-12 19:21:01 IP:140.134.xxx.xxx 訂閱

===================引 用 boss.tw 文 章===================
我試了以下程式,可以正常運作,請參考
論壇 bug , &pi 會變成 π

[code cpp]
void __fastcall TForm1::Button1Click(TObject *Sender)
{
STARTUPINFO si ={0};
PROCESS_INFORMATION pi ={0};
LPTSTR szCmdline="project1.exe";
//ZeroMemory( &si, sizeof(si) );
si.cb = sizeof(si);
//eroMemory( pi , sizeof(pi) );
// Start the child process.
if( !CreateProcess( NULL, // No module name (use command line)
szCmdline, // Command line
NULL, // Process handle not inheritable
NULL, // Thread handle not inheritable
FALSE, // Set handle inheritance to FALSE
0, // No creation flags
NULL, // Use parent's environment block
NULL, // Use parent's starting directory
&si, // Pointer to STARTUPINFO structure
&pi ) // Pointer to PROCESS_INFORMATION structure
)
{
ShowMessage(String("").cat_sprintf("CreateProcess failed (%d).\n", GetLastError()));
return;
}
// Wait until child process exits.
WaitForSingleObject( pi.hProcess, INFINITE );
// Close process and thread handles.
CloseHandle( pi.hProcess );
CloseHandle( pi.hThread );
}

[/code]

請問一下您的檔案路徑是放在桌面上嗎??
因為這個程式碼妳寫的跟我的都跑出一樣的結果~~都是出現CreatProcess failed(2)的錯誤
taishyang
站務副站長


發表:377
回覆:5485
積分:4552
註冊:2002-10-08

發送簡訊給我
#7 引用回覆 回覆 發表時間:2009-02-12 19:24:31 IP:118.169.xxx.xxx 訂閱
雙斜線
LPTSTR
szCmdline="G:\\smooth\\smooth.exe";
5515531
一般會員


發表:19
回覆:44
積分:12
註冊:2008-04-16

發送簡訊給我
#8 引用回覆 回覆 發表時間:2009-02-13 11:50:44 IP:140.134.xxx.xxx 訂閱

===================引 用 taishyang 文 章===================
雙斜線
LPTSTR
szCmdline="G:\\smooth\\smooth.exe";


雙斜線我嘗試過了~~雖然沒有錯~~但是沒有畫面跑出來耶!!
所以我一直在想是不是路徑上的錯誤~~
編輯記錄
5515531 重新編輯於 2009-02-13 11:51:28, 註解 無‧
boss.tw
高階會員


發表:15
回覆:109
積分:194
註冊:2005-05-17

發送簡訊給我
#9 引用回覆 回覆 發表時間:2009-02-13 18:13:34 IP:60.250.xxx.xxx 訂閱
LPTSTR szCmdline="G:\\smooth\\smooth.exe";
指的是絕對路徑,就是 smooth.exe 必須存在於
G:\smooth\ 目錄下

LPTSTR szCmdline="smooth\\smooth.exe";
指的是相對路徑,就是 smooth.exe 必須存在於
執行程式的路徑\smooth\ 目錄下

LPTSTR szCmdline="smooth.exe";
指的是相對路徑,就是 smooth.exe 必須存在於
執行程式的路徑 目錄下,也就是跟 執行的程式 同目錄
5515531
一般會員


發表:19
回覆:44
積分:12
註冊:2008-04-16

發送簡訊給我
#10 引用回覆 回覆 發表時間:2009-02-17 16:58:32 IP:140.134.xxx.xxx 訂閱
各位大大~不好意思回的有點慢~在此說聲抱歉

我後來也是有將檔案擺在我指定的地方
但還是不行
我路徑應該是沒有設錯
還是我應該要把我要執行的檔案PO上來
5515531
一般會員


發表:19
回覆:44
積分:12
註冊:2008-04-16

發送簡訊給我
#11 引用回覆 回覆 發表時間:2009-02-25 13:04:28 IP:140.134.xxx.xxx 訂閱
不好意思~~能不能提供簡單的程式碼供我參考呢?
因為這個我真的沒辦法讀取!!
真的很不好意思~~麻煩了!!
boss.tw
高階會員


發表:15
回覆:109
積分:194
註冊:2005-05-17

發送簡訊給我
#12 引用回覆 回覆 發表時間:2009-03-03 18:58:53 IP:60.250.xxx.xxx 訂閱

[code cpp]
HANDLE hProg;
int ret = 0;
AnsiString exePath = ExtractFilePath(Application->ExeName) "xxx.exe";
ret = spawnl(P_WAIT, exePath.c_str(), exePath.c_str(), "", "", NULL);
[/code]
jazz
初階會員


發表:10
回覆:43
積分:35
註冊:2002-06-15

發送簡訊給我
#13 引用回覆 回覆 發表時間:2009-03-04 15:29:28 IP:61.218.xxx.xxx 訂閱
smooth.exe會不會是一個DOS視窗的程式啊?
其實他有跑出來,只是跑完了程式又關閉視窗了
試試看先跑cmd.exe

純粹只是猜測
5515531
一般會員


發表:19
回覆:44
積分:12
註冊:2008-04-16

發送簡訊給我
#14 引用回覆 回覆 發表時間:2009-03-04 18:09:28 IP:140.134.xxx.xxx 訂閱

===================引 用 boss.tw 文 章===================

[code cpp]
HANDLE hProg;
int ret = 0;
AnsiString exePath = ExtractFilePath(Application->ExeName) "xxx.exe";
ret = spawnl(P_WAIT, exePath.c_str(), exePath.c_str(), "", "", NULL);
[/code]

不好意思再冒昧請問一下
這應該放在哪邊及如何使用!!
boss.tw
高階會員


發表:15
回覆:109
積分:194
註冊:2005-05-17

發送簡訊給我
#15 引用回覆 回覆 發表時間:2009-03-04 18:59:23 IP:60.250.xxx.xxx 訂閱
放在 Button1Click 裡,取代原來Button1Click裡的東西

===================引 用 5515531 文 章===================

===================引 用 boss.tw 文 章===================

[code cpp]
HANDLE hProg;
int ret = 0;
AnsiString exePath = ExtractFilePath(Application->ExeName) "xxx.exe";
ret = spawnl(P_WAIT, exePath.c_str(), exePath.c_str(), "", "", NULL);
[/code]

不好意思再冒昧請問一下
這應該放在哪邊及如何使用!!
5515531
一般會員


發表:19
回覆:44
積分:12
註冊:2008-04-16

發送簡訊給我
#16 引用回覆 回覆 發表時間:2009-03-05 11:13:21 IP:140.134.xxx.xxx 訂閱
我使用了~但出現下列訊息
[C Error] Unit1.cpp(52): E2268 Call to undefined function 'spawnl'
[C Error] Unit1.cpp(52): E2451 Undefined symbol 'P_WAIT'
[C Warning] Unit1.cpp(53): W8004 'ret' is assigned a value that is never used
boss.tw
高階會員


發表:15
回覆:109
積分:194
註冊:2005-05-17

發送簡訊給我
#17 引用回覆 回覆 發表時間:2009-03-05 11:17:31 IP:60.250.xxx.xxx 訂閱
#include <   process.h   >
抱歉少了這個
編輯記錄
boss.tw 重新編輯於 2009-03-05 11:18:04, 註解 無‧
5515531
一般會員


發表:19
回覆:44
積分:12
註冊:2008-04-16

發送簡訊給我
#18 引用回覆 回覆 發表時間:2009-03-05 11:34:00 IP:140.134.xxx.xxx 訂閱
它出現了下列訊息~是沒使用到的意思嗎??
[C Warning] Unit1.cpp(54): W8004 'ret' is assigned a value that is never used
雖然出現訊息但是它是可以執行的!!
但是我按下按鈕之後~卻不能開啟我要的執行檔~難道C不能開C的檔案嗎?
以之前的討論~我的路徑沒錯!!所以很納悶~~不好意思又要麻煩了!!
boss.tw
高階會員


發表:15
回覆:109
積分:194
註冊:2005-05-17

發送簡訊給我
#19 引用回覆 回覆 發表時間:2009-03-05 11:41:19 IP:60.250.xxx.xxx 訂閱
AnsiString exePath = ExtractFilePath(Application->ExeName) "xxx.exe";

ExtractFilePath(Application->ExeName) 指的是目前編譯的程式的目徑
"xxx.exe"; 指的是你要執行的執行檔

所以請你把要執行的檔放在同一個目錄

另外
jazz 提到的問題你要先離清,是否你要執行的檔可以正常執行有畫面

你提到的是
Warning,為什麼會有 Warning,你po 出的文字已經告訴你了,請自已翻成中文

編輯記錄
boss.tw 重新編輯於 2009-03-05 11:42:31, 註解 無‧
boss.tw 重新編輯於 2009-03-05 11:46:13, 註解 無‧
5515531
一般會員


發表:19
回覆:44
積分:12
註冊:2008-04-16

發送簡訊給我
#20 引用回覆 回覆 發表時間:2009-03-05 11:51:56 IP:140.134.xxx.xxx 訂閱
不好意思~~
我將檔案放至相同目錄下~~還是不行
還是能把你的mail給我~~我將我寫的檔案寄給你看!!
因為我不知道回覆要怎麼把整個程式PO上來!!
boss.tw
高階會員


發表:15
回覆:109
積分:194
註冊:2005-05-17

發送簡訊給我
#21 引用回覆 回覆 發表時間:2009-03-05 12:46:26 IP:60.250.xxx.xxx 訂閱
5515531
一般會員


發表:19
回覆:44
積分:12
註冊:2008-04-16

發送簡訊給我
#22 引用回覆 回覆 發表時間:2009-03-05 13:58:26 IP:140.134.xxx.xxx 訂閱
真的很對不起boss.tw大大~我嘗試了一下
是我那個smooth.exe的問題
因為我開其他的檔案~~其實是可以用的!在此說聲抱歉~麻煩了!!

jazz大大~不好意思~~我沒看到你有留言~~抱歉!!
你說的DOS的問題~我有試過了!它是可以開啟的~且DOS不會關掉!!
在此說聲抱歉!!請原諒!!
5515531
一般會員


發表:19
回覆:44
積分:12
註冊:2008-04-16

發送簡訊給我
#23 引用回覆 回覆 發表時間:2009-03-05 14:02:28 IP:140.134.xxx.xxx 訂閱
我終於解決問題了!!
原因是因為~它有些dll檔要一起放在同個資料夾中才會跑出所要的程式~~
謝謝各位的幫忙~~!!也不好意思勞煩各位了!!謝謝~~
系統時間:2017-10-22 5:26:57
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!