ShellExcute 로 exe 파일이 아닌것 실행시키기

Fe.head의 이미지

a.exe 파일이 있습니다.
이걸 ShellExcute로 실행하면

ShellExecute(NULL, "open", "a.exe", NULL, NULL, SW_SHOW);

로 실행이 가능합니다.

그런데 이파일을 a.bin로 이름을 변경하였고 이를 ShellExcute로 실행하면

ShellExecute(NULL, "open", "a.bin", NULL, NULL, SW_SHOW);

에러가 떨어집니다.

어떻게 해야 ShellExcute로 파일을 실행 시킬수 있을까요?

ShellExecute 나 ShellExecuteEx만 써야 하는데 어떻게 실행할 수 있는지...

익명사용자의 이미지

ShellExecute 의 "open" 은 윈도우 쉘, 탐색기에 파일확장자별 등록된 명령을 실행해 주는 겁니다.

txt 등 텍스트 파일이면 디폴트로 노트패드를 띄우고,
exe, com 이라는 실행파일이기에 바로 실행시키는 겁니다.

ShellExecute는 레지스트리에 등록된 파일 타입(확장자)별 실행 방식에 따른 동작을 수행해 줍니다.
"open" 대신 "edit" "print" 등 동작에 따른 등록된 명령을 실행해 주는 겁니다.

bin 은 등록된 파일유형이 아니기 때문에 등록된 명령도 없어 실행이 되지않는겁니다.
bin 에 별도의 프로그램을 등록해 두시면 해당 프로그램 호출 명령이 실행됩니다.

Fe.head의 이미지

winexec 로 실행이 되는데.
ShellExecute로는 실행이 안되네요.

비스타 관련해서 UAC권한때문에 WinExec에서 ShellExecute로 바꿔야 하는데..
참.. 고민이네요.

답글 감사합니다.

-----------------------
과거를 알고 싶거든 오늘의 네 모습을 보아라. 그것이 과거의 너니라.
그리고 내일을 알고 싶으냐?
그러면 오늘의 너를 보아라. 그것이 바로 미래의 너니라.

고작 블로킹 하나, 고작 25점 중에 1점, 고작 부활동
"만약 그 순간이 온다면 그때가 네가 배구에 빠지는 순간이야"

fontutil의 이미지

헐.. 제가 만든 프로그램에서 사용했던 방법이군요. 저도 첨에 좀 고민했었죠.

"open"으로 하지마시고 ""으로 하시면 됩니다. (넘 쉽나요?)

그렇게 하면 확장자에 관계없이 그 파일과 연결된 프로그램을 실행하게 됩니다.
물론 exe같은 실행 파일은 그냥 실행하게 되지요.

Fe.head의 이미지

일단 답글 감사하고요^^

"open" 이 아닌 ""로 해봤는데 여전히 안되네요.^^;

ShellExecute(NULL, "", "a.bin", NULL, NULL, SW_SHOW);

-----------------------
과거를 알고 싶거든 오늘의 네 모습을 보아라. 그것이 과거의 너니라.
그리고 내일을 알고 싶으냐?
그러면 오늘의 너를 보아라. 그것이 바로 미래의 너니라.

고작 블로킹 하나, 고작 25점 중에 1점, 고작 부활동
"만약 그 순간이 온다면 그때가 네가 배구에 빠지는 순간이야"

fontutil의 이미지

글꼴 통합 변환기 소스 중 일부입니다..
이걸로 해서 저는 제대로 실행되었거든요.. -_- 이상하네

void ShellExec(String AFileName)
{
HINSTANCE hInstance1;
hInstance1 = ShellExecute(Application->Handle, "", AFileName.c_str(), "", NULL, SW_SHOWNORMAL);
if ((int)hInstance1 <= 32) {
ShowErrorMessage("다음 파일을 실행하는 중 오류가 발생하였습니다!\n\n" + AFileName);
return;
}
}

Fe.head의 이미지

notepad.exe 를 d:\n.bin 파일로 복사후에.

visual c++ 6.0에서

ShellExecute(NULL, "", "d:\\n.bin", NULL, NULL, SW_SHOWNORMAL);

했는데. 실행이 안되는군요.

혹시 다른거 깔으신거 있으신건가요?

플래폼 sdk 라든가...

-----------------------
과거를 알고 싶거든 오늘의 네 모습을 보아라. 그것이 과거의 너니라.
그리고 내일을 알고 싶으냐?
그러면 오늘의 너를 보아라. 그것이 바로 미래의 너니라.

고작 블로킹 하나, 고작 25점 중에 1점, 고작 부활동
"만약 그 순간이 온다면 그때가 네가 배구에 빠지는 순간이야"

fontutil의 이미지

그게 무슨 뜻? NOTEPAD.EXE의 복사본을 만들어 그 복사본의 파일이름을
N.BIN으로 변경했단 뜻인가요? 그래서 N.BIN을 실행하겠단 뜻인가요?

Fe.head의 이미지

예 맞습니다.^^

-----------------------
과거를 알고 싶거든 오늘의 네 모습을 보아라. 그것이 과거의 너니라.
그리고 내일을 알고 싶으냐?
그러면 오늘의 너를 보아라. 그것이 바로 미래의 너니라.

고작 블로킹 하나, 고작 25점 중에 1점, 고작 부활동
"만약 그 순간이 온다면 그때가 네가 배구에 빠지는 순간이야"

fontutil의 이미지

이제서야 님의 질문의 요지를 파악했네요.

EXE 파일의 확장자를 다른 확장자로 변경한 다음
그것을 곧바로 실행하는 방법을 물으셨군요.

무슨 이유로 그러한 테크닉을 필요로 하시는지 조금 궁금합니다만..
그런것을 가능하게 하는 윈도API가 있을런지 모르겠네요.

제 짧은 지식으론 없다고 말씀드릴 수 있겠구요..
다만 그와 비슷한 효과를 낼 순 있습니다..
윈도 임시 폴더에 BIN 파일의 사본을 만들어서
그 파일의 확장자를 다시 EXE로 변경한 후
그걸 실행하는 것이지요..

Fe.head의 이미지

그 프로그램을 직접 실행시키지 못하게 하고 싶어서 입니다.

그러니깐 다른 프로그램이 그 프로그램을 실행 시키게 하고 싶어서 입니다.

WinExec 함수로는 실행 시킬수 있는데.
(CreateProcess 도 가능함을 확인했음)

vista의 UAC는 ShellExecute로만 된다고 해서.. 그방법을 찾고 있습니다.

-----------------------
과거를 알고 싶거든 오늘의 네 모습을 보아라. 그것이 과거의 너니라.
그리고 내일을 알고 싶으냐?
그러면 오늘의 너를 보아라. 그것이 바로 미래의 너니라.

고작 블로킹 하나, 고작 25점 중에 1점, 고작 부활동
"만약 그 순간이 온다면 그때가 네가 배구에 빠지는 순간이야"

fontutil의 이미지

헐..그랬군요. 근데 그 프로그램이 꼭 노트패드인건가요?
아니면 자신이 만든 프로그램인가요? 자기가 만든걸
그렇게 하고자 한다면 DLL로 하시면 될듯한데요..
(호출할 때 적절한 매개변수 넘겨줘서 확인하기)
휴.. 녹슬은 저의 머리론 여기가 한계.. ㅡㅜ

Fe.head의 이미지

답글 감사합니다.
DLL으로 하는 방법..

대체로 어떻게 하는지요?
지금 당장은 고려는 못하겠지만.

마지막에는 고려 할수 있을것 같은데요^^
링크라도..^^

앗 화장실 급해라^^

앗.. 안되는군요.
dll은 도저히 안됩니다. ㅜ.ㅠ
-----------------------
과거를 알고 싶거든 오늘의 네 모습을 보아라. 그것이 과거의 너니라.
그리고 내일을 알고 싶으냐?
그러면 오늘의 너를 보아라. 그것이 바로 미래의 너니라.

고작 블로킹 하나, 고작 25점 중에 1점, 고작 부활동
"만약 그 순간이 온다면 그때가 네가 배구에 빠지는 순간이야"

fontutil의 이미지

그러고보니 DLL까지 안해도 되겠네요..

그러니까 실행하고자 하는 프로그램이 자기가 만든
EXE 프로그램이라는 전제 하에...

그냥 일반적인 EXE 프로그램처럼 만들구요.
main() 함수 매개변수를 확인해서 특정 문자열이
넘어오면 실행하고 안그러면 그냥 아무 동작도 안하고
리턴시켜버리기..

이렇게 만든 서브exe를 메인 프로그램에서 shellexec따위로 실행할때
그 특정문자열을 매개변수로 함께 넘겨주면서 실행..
그럼 정상적으로 실행되겠죠? ㅋ

물론 강도높은 보안이 필요한 경우라면 실행압축기로 압축한다던가..
다른 방법을 강구해야겠지요..

Fe.head의 이미지

그 보안 때문에 ShellExec 를 쓰는겁니다. ㅡ.ㅜ

"cmd.exe", "/C a.bin", NULL ...
으로 실행하는 방법이 있긴 있는데.

cmd shell이 나와 버려서 안되는군요.

답글 주셔서 감사하고요. 좋은 하루되세요^^
-----------------------
과거를 알고 싶거든 오늘의 네 모습을 보아라. 그것이 과거의 너니라.
그리고 내일을 알고 싶으냐?
그러면 오늘의 너를 보아라. 그것이 바로 미래의 너니라.

고작 블로킹 하나, 고작 25점 중에 1점, 고작 부활동
"만약 그 순간이 온다면 그때가 네가 배구에 빠지는 순간이야"

fontutil의 이미지

그렇게 하시고 끝에 매개변수를 SW_HIDE로 하면 되지 않을까요?
안되려나.. ㅡ.ㅜ

fontutil의 이미지

근데 BIN 확장자가 분명히 연결 프로그램으로 설정된게 있는 상태인건가요?

Fe.head의 이미지

bin 파일은 아무것도 연결되어 있지 않은 상태 입니다.

-----------------------
과거를 알고 싶거든 오늘의 네 모습을 보아라. 그것이 과거의 너니라.
그리고 내일을 알고 싶으냐?
그러면 오늘의 너를 보아라. 그것이 바로 미래의 너니라.

고작 블로킹 하나, 고작 25점 중에 1점, 고작 부활동
"만약 그 순간이 온다면 그때가 네가 배구에 빠지는 순간이야"

fontutil의 이미지

그럼 당연히 실행이 안되죠.. ㅡㅜ

혹시.. 그걸 실행해서 BIN 확장자를 무슨 프로그램과
연결할 것인가를 묻는 대화상자를 띄우고 싶으신건가요?

Fe.head의 이미지

아니요. ^^
그냥 일반 실행 프로그램을 실행 시킨것과 똑같게 실행 시키고 싶습니다.
-----------------------
과거를 알고 싶거든 오늘의 네 모습을 보아라. 그것이 과거의 너니라.
그리고 내일을 알고 싶으냐?
그러면 오늘의 너를 보아라. 그것이 바로 미래의 너니라.

고작 블로킹 하나, 고작 25점 중에 1점, 고작 부활동
"만약 그 순간이 온다면 그때가 네가 배구에 빠지는 순간이야"

fontutil의 이미지

헐,. 그러고보니 제가 처음 님의 질문을 제대로 읽지 않은 듯???
아니면 님께서 질문 내용을 수정하신건가요?
휴 요즘 정신이 없네요 .. ㅡㅜ

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.