フォームからアプリが起動できない(VS2012Express)

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
ren

フォームからアプリが起動できない(VS2012Express)

#1

投稿記事 by ren » 12年前

お世話になっております。

現在、簡単なアプリケーションランチャーを作成しようとしています。
環境はVisual Studio 2012 expressで、普段はC言語+DXライブラリで
ソフトの開発を行っています。

今回、作成したフォームアプリケーション(ランチャー)から
指定したプログラムを起動させることが出来ず
困っているため質問致します。

画面には4つのボタン(インストール、起動、アンインストール、終了)があり、
終了ボタン以外は指定したプログラムを起動するだけのものです。
ただし、インストール状況、インストール先をレジストリで管理し、
インストール前の状態では、起動、アンインストールボタンを非活性に、
インストール後の状態ではインストールボタンが非活性に、
またインストール後は起動ボタンを押すとレジストリに登録された位置の
プログラムを起動する仕様です。
(レジストリへの登録はインストーラ側で行うので、ここでは無視してください。)

このような仕様のもと、まずはVisualStudio内でボタンを配置して、
クリック時にShellExecute()が実行されれば、まずはインストールボタンの処理は
完成かと思ったのですが、フォームアプリケーション内でShellExecuteを記述すると、
ビルド時にエラーになってしまいます。

どうすれば解決する問題なのでしょうか。

アバター
h2so5
副管理人
記事: 2212
登録日時: 15年前
住所: 東京
連絡を取る:

Re: フォームからアプリが起動できない(VS2012Express)

#2

投稿記事 by h2so5 » 12年前

エラーの内容を書いてください。

アバター
みけCAT
記事: 6734
登録日時: 15年前
住所: 千葉県
連絡を取る:

Re: フォームからアプリが起動できない(VS2012Express)

#3

投稿記事 by みけCAT » 12年前

「普段は」C言語+DXライブラリを使っているとのことですが、わざわざ「普段は」と書くということは、
今使っている言語は違うという印象を受けます。どの言語を使っているのでしょうか?

また、エラーが出た際は、エラーメッセージを貼っていただくと答えやすくなります。
ren さんが書きました:どうすれば解決する問題なのでしょうか。
「フォームアプリケーション」がどういうものか良くわかりませんが、
System.Diagnostics.Process.Start("起動したいファイル名")でできるかもしれません。
http://dobon.net/vb/dotnet/process/openfile.html
また、system("起動したいファイル名")でもできるかもしれません。
http://okwave.jp/qa/q5304864.html
WinExec関数CreateProcess関数もあります。

どの程度の演出や装飾をしたいかわかりませんが、説明だけを見ると単純な仕様に見えるので、
素直にDev-C++を用い、C言語でコードを書いてアプリケーションを作成する、ということも一つの解決法です。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

ren

Re: フォームからアプリが起動できない(VS2012Express)

#4

投稿記事 by ren » 12年前

ご返信ありがとうございます。
今回作成している画面は、
VisualStudioから ファイル→新しいプロジェクト→Visual C++→CLR→カラのCRLプロジェクト で作成したものです。

ボタン設置箇所は以下のように書いています(最初にwindows.hをインクルードしています。

コード:

private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {
    ShellExecute(NULL, L"open", L"notepad.exe",NULL,NULL,SW_SHOWNORMAL);
}
しかし、これをビルドすると、以下のエラーが発生します。

エラー 1 error LNK2028: 未解決のトークン (0A000041) "extern "C" struct HINSTANCE__ * __stdcall ShellExecuteW(struct HWND__ *,wchar_t const *,wchar_t const *,wchar_t const *,wchar_t const *,int)" (?ShellExecuteW@@$$J224YGPAUHINSTANCE__@@PAUHWND__@@PB_W111H@Z) が関数 "private: void __clrcall mainlauncher::MainForm::button1_Click(class System::Object ^,class System::EventArgs ^)" (?button1_Click@MainForm@mainlauncher@@$$FA$AAMXP$AAVObject@System@@P$AAVEventArgs@4@@Z) で参照されました。 C:\Users\xxxxx\project\launcher\main-launcher\MainForm.obj main-launcher
エラー 2 error LNK2019: 未解決の外部シンボル "extern "C" struct HINSTANCE__ * __stdcall ShellExecuteW(struct HWND__ *,wchar_t const *,wchar_t const *,wchar_t const *,wchar_t const *,int)" (?ShellExecuteW@@$$J224YGPAUHINSTANCE__@@PAUHWND__@@PB_W111H@Z) が関数 "private: void __clrcall mainlauncher::MainForm::button1_Click(class System::Object ^,class System::EventArgs ^)" (?button1_Click@MainForm@mainlauncher@@$$FA$AAMXP$AAVObject@System@@P$AAVEventArgs@4@@Z) で参照されました。 C:\Users\xxxxx\project\launcher\main-launcher\MainForm.obj main-launcher
エラー 3 error LNK1120: 2 件の未解決の外部参照 C:\Users\xxxxx\project\launcher\main-launcher\Debug\main-launcher.exe 1 1 main-launcher

ご紹介いただいた他の方法は今から試してみます。ありがとうございます。

アバター
h2so5
副管理人
記事: 2212
登録日時: 15年前
住所: 東京
連絡を取る:

Re: フォームからアプリが起動できない(VS2012Express)

#5

投稿記事 by h2so5 » 12年前

#include <windows.h> の下に、以下のプリプロセッサを追加してください。

コード:

#pragma comment(lib, "shell32.lib")
これでビルドはできると思います。

ren さんが使っているのはC言語でもC++でもないC++/CLIというものですが、
アプリケーションランチャーを作成するのであればC++/CLIを使うメリットが無いので、代わりにC#をおすすめします。

閉鎖

“C言語何でも質問掲示板” へ戻る