Thanks,
I've solved this by doing basically the same things...
I modified my settings page so it doesn't use DNN's settings table but my own;
On module load, when I load the module settings, if the query returns nothing then I launch the settings form like this:
Dim objCtl As New UCanUse.Core.Business.SettingController
Dim settings As IDictionary = objCtl.GetModuleSettingKeysValuesbyModuleIDModuleContextContextID(ModuleId, ModuleContext, ContextID)
If Settings Is Nothing OrElse Settings.Count = 0 Then
'redirect to the Settings Page
Dim strCID As String = "&cid=" & Convert.ToString(ContextID)
Dim strParams() As String = strCID.Split(" "c)
Response.Redirect(EditUrl("ctx", Convert.ToString(ModuleContext), "ModuleSettings", strParams))
Exit Sub
End If
... rest of module settings load code which is executed if settings are found.
This way, the user doesn't have to do anything but fill out the settings form, and if he/she doesn't, it will just keep launching until they do every time they visit the module.
It's an old construct, does anyone know if there is a newer construct that allows passing multiple variables to lauch a control? GetEditURL only allows for one paramter.