Thursday, December 19, 2019

Project Explorer: Automatically Digitally Signing an EXE After Building

When a customer reports a bug, we usually fix it immediately and send them a “hot fix”, which is usually just an updated EXE. Because it doesn’t go through our usual build process, the EXE isn’t digitally signed, which can cause issues on some machines. I created a batch file to sign the EXE but most of the time forget to run it before sending the EXE to the customer. Then it occurred to me I could automate that process using Project Explorer.

I created the following program and added it to the Addins subdirectory of the folder where Project Explorer exists:

lparameters toParameter1, ;
    tuParameter2, ;
    tuParameter3
local laStack[1], ;
    lnRows, ;
    lnI, ;
    lcApp, ;
     lcDescription, ;
    lcCommand, ;
    lcFolder, ;
    loAppRun

* If this is a registration call, tell the addin manager which method we're
* an addin for.

if pcount() = 1
    toParameter1.Method = 'AfterBuildProject'
    toParameter1.Active = .T.
    toParameter1.Name   = 'Sign EXE after building'
    return
endif

* This is an addin call, so if we built an EXE, sign it.

if tuParameter2 = 3
    lnRows = astackinfo(laStack)
    for lnI = 1 to lnRows
        if 'projectexplorerui.vct' $ laStack[lnI, 2]
            lcApp = fullpath('..\projectexplorer.app', laStack[lnI, 2])
        endif 'projectexplorerui.vct' $ laStack[lnI, 2]
    next lnI
    lcDescription = inputbox('Description', 'Description for EXE')
    text to lcCommand textmerge noshow pretext 1 + 2
    "SignToolPath\signtool.exe" sign /fd SHA256 /tr
http://timestamp.digicert.com /td SHA256 /f CertificatePath /d "<<lcDescription>>" /p Password "<<tuParameter3>>"
    endtext
    lcFolder = justpath(tuParameter3)
    loAppRun = newobject('APIAppRun', 'APIAppRun.PRG', lcApp, lcCommand, ;
        lcFolder, 'HID')
     loAppRun.LaunchAppAndWait()
endif tuParameter2 = 3
return .T.

Substitute SignToolPath with the path to SignTool.exe, CertificatePath with the path and name of the certificate file, and Password with the password.

This program is a Project Explorer addin that’s called after a project is built successfully. This code checks whether it was an EXE (we’re not going to sign an APP) and if so, finds the location of Project Explorer so it can use the built-in APIAppRun class to call SignTool.exe to digitally sign the EXE.

Now, whenever I build an EXE in Project Explorer, it’s automatically signed so I don’t have to remember to do it.

Monday, November 04, 2019

Southwest Fox 2019

If you missed Southwest Fox 2019, you missed a seriously great time. Check out the hundreds of photos (Facebook and Google Photos) our Social Media Manager Jody Meyer took and watch the Keynote presentation by Kevin Ragsdale on YouTube: Part 1, Part 2, and Part 3.

Congratulations to the 2019 VFPX Administrators Award winner Christof Wollenhaupt for his FoxMock project. Congratulations to the 2018 Speaker Award winner Tuvia Vinitsky.

We announced dates for next year's conference already, and it’s a little later than our usual October dates: November 12 - 15, 2020. I hope to see you in Phoenix next year!

Saturday, October 26, 2019

INTL is now open source!

Steven Black’s INTL Toolkit has been the tool of choice for years for developers needing to create international and multilingual applications. At the Southwest Fox 2019 keynote presentation, Cathy Pountney announced on behalf of Steve that he’d generously made INTL an open source project. Thanks, Steve, for this great contribution (as well as your many others) to our community!

Friday, October 25, 2019

Southwest Fox 2019 Keynote Presentation

Due to technical difficulties, the Facebook live video of the Keynote Presentation of Southwest Fox 2019 is unavailable, so we've posted it on YouTube: Part 1, Part 2, and Part 3.

Tuesday, October 08, 2019

Watch the Southwest Fox Keynote Live

We are using Facebook live video to stream the Keynote Presentation starting at 7:00 pm MST, Thursday, October 24. Kevin Ragsdale is presenting the keynote session titled “The Fox Family: A Whimsical Celebration of FoxPro and the FoxPro Community”.

Tuesday, August 27, 2019

Southwest Fox 2019: Early-bird deadline approaches

Because we were all busy this summer, we extended the Early-Bird Registration deadline, but it’s almost here. Save $50 by registering before this Friday, August 30th. Every registered attendee gets admission and white papers to all regular conference sessions plus free admission to the X# post conference session. Don't miss this chance to learn from the best and mix with your peers.

See you in October!

Tuesday, June 25, 2019

The FoxShow 86

Listen to Tamar Granor discuss women in tech, different ways of sharing information, and how to go from wallflower to presenter on The FoxShow 86.

Monday, June 24, 2019

Southwest Fox 2019 Super-Saver Deadline Approaches

Registration for Southwest Fox 2019 has been open for a few weeks and there’s less than a week until the Super-Saver Registration deadline. If you register before the end of June, you save $125 and we’ll throw in a pre-conference session worth $99. Not only that, but you’ll be entered in the drawings for a scholarship that will reduce your cost even more and a license of Stonefield Query SDK, a $2,500 value. Check out the speakers and topics on the conference website.

Please beat the rush so we still have some fingernails left when July begins! No need to wait, we won’t charge your card or cash your check until the middle of July!

Wednesday, June 19, 2019

The FoxShow 85

Join us on The FoxShow 85 for a discussion with Rick Schummer, one of the organizers of Southwest Fox, as we learn where he started, what and how he's learned to get to where he is, and why conferences will make him say "wow - how can I use that?"

The FoxShow 84

On The FoxShow 84, Andrew MacNeill and I talk about my start in the computer industry from Commodore PET and how much FoxPro development I do today. I'm also excited about the Southwest Fox conference and what I've learned from past conferences, and the real reasons people should attend (hint, it's not just the sessions).