我有一个非常奇怪的问题。我有一个用VS .NET for .NET Framework 4编写的Winforms应用程序。 在应用程序中,用户可以将文件拖放到列表中以加载它们。这一直都很有效。代码是:
Private Sub dgvFiles_DragEnter(sender As System.Object, e As System.Windows.Forms.DragEventArgs) Handles lvFiles.DragEnter, lblNodFiles.DragEnter
If e.Data.GetDataPresent(DataFormats.FileDrop) Then
e.Effect = DragDropEffects.All
End If
End Sub
Private Sub dgvFiles_DragDrop(sender As System.Object, e As System.Windows.Forms.DragEventArgs) Handles lvFiles.DragDrop, lblNodFiles.DragDrop
If e.Data.GetDataPresent(DataFormats.FileDrop) Then
Dim DroppedFiles() As String
DroppedFiles = CType(e.Data.GetData(DataFormats.FileDrop), String())
'rest of file processing, not relevant
End If
End Sub
正如我所说,这很好用。我最近注意到,在安装后第一次运行应用程序时却没有。 DragDrop事件也不会触发DragEnter
事件。鼠标光标也保持Drag-Not-Allowed-cursor。
当我关闭应用程序并重新启动它时,它再次完美无缺。
我能看到的唯一区别是,在第一个程序启动时,用户必须通过我在实际Application.Run
之前加载的注册表注册应用程序。
''' <summary>
''' Main Sub
''' </summary>
''' <remarks>Handles loading of settings and so on</remarks>
Sub Main()
'Some application event handler are set here and some irrelevant stuff
'Update Splash Screen here
frmSplash.UpdateText()
frmSplash.Show()
frmSplash.Refresh()
'Here the registration dialog is shown where the user enters his data
'which is confirmed and saved. Returns true if all is ok.
Dim isRegged As Boolean = PerformRegistrationCheck(0, False)
'Another splash update to accomodate for registration details
frmSplash.UpdateText()
frmSplash.Refresh()
If isRegged Then
'App preparation steps
frmSplash.Close()
Application.Run(frmMain)
End If
End Sub
编辑:我试图抛弃注册检查,但在第一个程序启动时它仍无效,但之后没有问题。
是否有人有任何可能导致此类行为的建议或想法?我完全迷失了。 如果需要,我很乐意提供其他相关信息。欢迎使用VB.NET或C#中的代码。
编辑2: Hans在评论中回答了这个问题。对于安装程序,可以在以下链接中找到解决方法。您基本上告诉explorer.exe运行您想要的程序。这将导致该程序以非高级权限运行。
http://mdb-blog.blogspot.de/2013/01/nsis-lunch-program-as-user-from-uac.html