ありがとうございます。
Unicode文字セットだとtest.exeが起動しません。
どこを直せばよろしいでしょうか?

TCHAR app_name[FILENAME_MAX];
wsprintf(app_name,L"%s\\test.exe",getenv("programfiles"));
ShellExecute(NULL,L"open",app_name,NULL,NULL,SW_SHOWNORMAL);