Testing apps

Monkey Targets Forums/Windows 8/Testing apps

ziggy(Posted 2013) [#1]
It's a bit weird that you need to open VS in order to test Win 8 apps. Has anyone find a way to prevent this?


Rushino(Posted 2013) [#2]
Yeah while exporting my game to win8 i figured this out. Only mark could tell us if this is normal. Btw thanks for opening the win8 forum!


Erik(Posted 2013) [#3]
Ok, I had a look at this and got it somewhat working

http://blogs.msdn.com/b/windowsappdev/archive/2012/09/04/automating-the-testing-of-windows-8-apps.aspx

and

http://stackoverflow.com/questions/14271025/can-i-run-my-winrt-application-as-a-screensaver


Here are the steps to run without opening visual studio:

1. Compile a Win8AppLaunch.exe file like the articles says. (I called my runapp.exe)

Finally I made a .bat file that looks like this to run angelfont_example:

powershell.exe Set-ExecutionPolicy AllSigned
powershell.exe Remove-AppxPackage acbdc544-1702-440e-82d9-0495d7c2c2e9_1.0.0.0_x86__73zwdfx56gv16
powershell.exe D:\dev\Monkey\Monkeypro\bananas\beaker\angelfont_example\angelfont_example.build\win8\AppPackages\MonkeyGame\MonkeyGame_1.0.0.0_Win32_Debug_Test\Add-AppDevPackage.ps1
d:\dev\monkey\monkeypro\runapp acbdc544-1702-440e-82d9-0495d7c2c2e9_73zwdfx56gv16!App


If this is run after compiling from monkey, the win8 app should start.

"acbdc544-1702-440e-82d9-0495d7c2c2e9_73zwdfx56gv16!App" is the appid, I don't think this changes, but if it does you can find it by running the following ps script as the stackoverflow answer says.

$installedapps = get-AppxPackage
foreach ($app in $installedapps)
{
foreach ($id in (Get-AppxPackageManifest $app).package.applications.application.id)
{
$app.packagefamilyname + "!" + $id
}
}


Big Jim(Posted 2013) [#4]
I don't mind opening VS. I downloaded the express version for free. You can edit the manifest file with their nice little editor, specify your icons, file name etc...


Erik(Posted 2013) [#5]
Still not sure about the APPIDs, but this modified transcc works on my machine:

\src\transcc\builders\win8.monkey line 62

If tcc.opt_run
  Local APPID := "acbdc544-1702-440e-82d9-0495d7c2c2e9_73zwdfx56gv16!App"
  Local APPID2 := "acbdc544-1702-440e-82d9-0495d7c2c2e9_1.0.0.0_x86__73zwdfx56gv16"

  Local targetPath := StripExt( tcc.opt_srcpath )+".build" +"/"+tcc.target.dir
  Local pspath := targetPath+ "/AppPackages/MonkeyGame/MonkeyGame_1.0.0.0_Win32"

  If ENV_CONFIG.ToLower() = "debug" Then
    pspath += "_Debug"
  End
  pspath += "_Test"

  tcc.Execute( "powershell.exe Remove-AppxPackage "+APPID2, False)
  tcc.Execute( "powershell.exe "+pspath+"/Add-AppDevPackage.ps1 -Force", False)
  tcc.Execute(tcc.monkeydir+"/runapp "+APPID)
Endif


runapp is an .exe file compiled with Visual Studio as a C++ Win32 Console Application

#include "stdafx.h"
#include <shlobj.h>
#include <stdio.h>
#include <shobjidl.h>
#include <objbase.h>
#include <atlbase.h>
#include <string>

/*++

  Routine Description:

    This routine launches your app using IApplicationActivationManager.

  Arguments:

    strAppUserModelID - AppUserModelID of the app to launch.
    pdwProcessId - Output argument that receives the process id of the launched app.

  Return value:

    HRESULT indicating success/failure

--*/
HRESULT LaunchApp(const std::wstring& strAppUserModelId, PDWORD pdwProcessId)
{
    CComPtr<IApplicationActivationManager> spAppActivationManager;
    HRESULT hrResult = E_INVALIDARG;
    if (!strAppUserModelId.empty())
    {
        // Instantiate IApplicationActivationManager
        hrResult = CoCreateInstance(CLSID_ApplicationActivationManager,
            NULL,
            CLSCTX_LOCAL_SERVER,
            IID_IApplicationActivationManager,
            (LPVOID*)&spAppActivationManager);

        if (SUCCEEDED(hrResult))
        {
            // This call ensures that the app is launched as the foreground window
            hrResult = CoAllowSetForegroundWindow(spAppActivationManager, NULL);
            
            // Launch the app
            if (SUCCEEDED(hrResult))
            {
                hrResult = spAppActivationManager->ActivateApplication(strAppUserModelId.c_str(),
                    NULL,
                    AO_NONE,
                    pdwProcessId);
            }
        }
    }

    return hrResult;
}

int _tmain(int argc, _TCHAR* argv[])
{
    HRESULT hrResult = S_OK;
    if (SUCCEEDED(CoInitializeEx(NULL, COINIT_APARTMENTTHREADED)))
    {
        if (argc == 2)
        {
            DWORD dwProcessId = 0;
            ++argv;
            hrResult = LaunchApp(*argv, &dwProcessId);
        }
        else
        {
            hrResult = E_INVALIDARG;
        }

        CoUninitialize();
    }

    return hrResult;
}



and you must have run the powershell command Set-ExecutionPolicy AllSigned