|
Hi,
I have developed a windows application that is used on a bunch of PC's on our network. I distribute it with click-once deployment.
On a couple of PC's certain GUI elements do not display / work as expected. For example, one of the forms contains a DataGridView, that has been set to not allow adding new rows. On one of the PC's mentioned however, the new row is visible, it does allow adding new rows. On another PC a form's title and a label on a StatusBar do not display at all.
Has anyone else ever come across this phenomenon ? Where should I look to fix this ?
Any help appreciated.
Regards,
Johan
My advice is free, and you may get what you paid for.
|
|
|
|
|
Is it "a datagridview" that displays said behaviour, or do all dgvs in the application show the extra row? If there's only one form in your app that's using the dgv, I'd try to write a small app to reproduce the behaviour to confirm it using the minimal code.
If it is "one" control that is misbehaving, then the problem is probably in handling the control, not the control itself. I'd be checking the application for any constructs to swallow exceptions.
Different ways of displaying a control, yes, that I would expect - since there have been multiple versions of the common controls, with flat controls introduced later.
Bastard Programmer from Hell
If you can't read my code, try converting it here[^]
|
|
|
|
|
Hi Eddy,
Eddy Vluggen wrote: ...I'd try to write a small app to reproduce the behaviour to confirm it using the minimal code.
Thanks, I will try that
Eddy Vluggen wrote: If it is "one" control that is misbehaving, then the problem is probably in handling the control, not the control itself. I'd be checking the application for any constructs to swallow exceptions.
I will check this. As the behavior is not happening on other PCs though, could it be possible that one PC (or .net framework) handles events and such in a different manner / order than another ?
Eddy Vluggen wrote: Different ways of displaying a control, yes, that I would expect - since there have been multiple versions of the common controls, with flat controls introduced later.
Again, could that be dependent on the .net framework version ?
Regards,
Johan
My advice is free, and you may get what you paid for.
|
|
|
|
|
Johan Hakkesteegt wrote: could it be possible that one PC (or .net framework) handles events and such in a different manner / order than another ? Highly unlikely, as it would break a lot of applications.
Johan Hakkesteegt wrote: could that be dependent on the .net framework version There's a change in NET 4.5 for resizing[^], but haven't seen anything specific in the other "what's new" articles. Even if there's a manifest saying to use the "new" common controls, I would not expect very different behaviour - a different look, yes, but changing the behaviour breaks existing apps.
There's a list on the versions here[^].
Bastard Programmer from Hell
If you can't read my code, try converting it here[^]
|
|
|
|
|
How can I enable RadComboBox based on selection using Ajax inside master page?
<asp:Content ContentPlaceHolderID="ContentPlaceholder" runat="server">
<asp:UpdatePanel runat="server">
<ContentTemplate>
<asp:RadioButtonList runat="server" ID="rblStateSchool" RepeatDirection="Horizontal"
AutoPostBack="true">
<asp:ListItem Value="State" Text="State"></asp:ListItem>
<asp:ListItem Value="School" Text="School"></asp:ListItem>
</asp:RadioButtonList>
<asp:RequiredFieldValidator runat="server" ID="rfvStateSchool" ControlToValidate="rblStateSchool"
CssClass="errorMessage" ErrorMessage="* Required"></asp:RequiredFieldValidator>
<telerik:RadComboBox ID="rcbGroups" CheckBoxes="true" AllowCustomText="false" runat="server"
DataValueField="GroupID" DataTextField="GroupName" Enabled="False" EnableViewState="true"
EmptyMessage="<Please Select>" Width="500px" EnableCheckAllItemsCheckBox="true"
AutoPostBack="true">
<ItemTemplate>
<%# DataBinder.Eval(Container.DataItem, "GroupName")%>
-
<%# DataBinder.Eval(Container.DataItem, "GroupID")%>
-
<%# DataBinder.Eval(Container.DataItem, "ContractStateCode")%>
</ItemTemplate>
</telerik:RadComboBox>
|
|
|
|
|
Have you tried the Telerik forum? Compared your code against their demo-project?
Bastard Programmer from Hell
If you can't read my code, try converting it here[^]
|
|
|
|
|
Because u did enabled=false. Make it true
Sankarsan Parida
|
|
|
|
|
This is the same program as the post below
I designed my windows service to run on a timer, and check the queue for email jobs.
So a job is queued, and I run the job on a new thread.
Question: Is this dumb to do and a waste of time?
I have the thread working now, but I need to be able to stop the thread or check on it's progress if the net stop is called, or power down while running. So I guess I need a delegate.
So this leads to the next question; how to write a delegate.
I used this post, http://tech.xster.net/tips/multi-threading-in-vb-net/[^]
but I don't understand where to place the code.
So I have a service code file, and a thread code file.
I call the thread here in the timer
[smtpMessenger.vb]
jRUN = New messageSender()
Dim dwRCode As Integer = jRUN.messageSender(
sJOBS(idx),
G_JOB_TIMER
)
And then this is my thread
[messageSender.vb]
Public Class messageSender
Inherits send_Message_Broadcast_Record
Implements IDisposable
Dim disposed As Boolean = False
Public M_RUNNING As Boolean
Public M_MAILINGLIST_ID As Integer
Public m_EMAILS_SENT As Integer
Public m_STOP As Boolean
Private mJOB As structure_CRM_JOBS
Private mList() As structure_MailingList_Array
Private M_JOBTIMER As System.Timers.Timer
Public Function messageSender( _
ByVal pJOB As structure_CRM_JOBS,
ByRef P_JOBTIMER As System.Timers.Timer) As Integer
Dim dwExitCode As Integer = 2
Dim ms_Container As messageSender = New messageSender()
ms_Container.mJOB = pJOB
ms_Container.M_JOBTIMER = P_JOBTIMER
ms_Container.m_STOP = False
Dim eLoader As New email_address_loader()
Dim e_count As Integer = eLoader.get_malingList_Count()
ReDim ms_Container.mList(e_count - 1)
eLoader.load_mailingList_Array(ms_Container.mList)
If Not (M_JOBTIMER Is Nothing) Then
M_JOBTIMER.Stop()
End If
Dim msThread As Thread = New Thread(New ThreadStart(AddressOf ms_Container.messageSender_Proc))
msThread.Priority = ThreadPriority.Lowest
msThread.IsBackground = True
msThread.Start()
msThread.Join()
Return dwExitCode
End Function
I could really use some help here, perhaps just some remarks like delegate here, this there to get a better understanding of how to use the delegate on my current code.
|
|
|
|
|
If it can be avoided do not kill a thread for outside, but try to set it up that it can be start/hold/stop in a normal way...
Please read here: http://msdn.microsoft.com/en-us/library/7a2f3ay4(v=vs.90).aspx[^]
I'm not questioning your powers of observation; I'm merely remarking upon the paradox of asking a masked man who he is. (V)
|
|
|
|
|
How frequently is your timer running? It might be simpler to create a console application to check the queue and send the mail, and then use the Windows Task Scheduler to schedule it to run every n minutes.
"These people looked deep within my soul and assigned me a number based on the order in which I joined."
- Homer
|
|
|
|
|
I agree 100%. Now I know why you guys suggested just writing a console app first.
But I made it past the painful part, and figured I would just finish the windows service.
I haven't really set the timers yet. I have 2 timers, 1 check timer and 1 job timer. I figure the check timer would run twice a day and book jobs for the job timer, the job timer would only run if jobs are present.
Would of been much easier to just write a console app and schedule each job individually.
I'm almost done, just need to start and stop the send message thread if I stop the service while jobs are running.
[EDIT]
I choose the windows service because I run the website on a server core with minimum GUI. My preference was server core with no GUI, but I needed the shell window in order to use FFMPEG, which is a console app. So the console app left a bad taste, and I opted for writing something for use in the future.
modified 6-Oct-14 13:33pm.
|
|
|
|
|
I stated my service project.
So I could not find instalutil on my hard drive, searched, OK, you just write a built-in one.
So I guess I need to get it installed first, and then running so I can attach to it to use the debugger.
Found this here on CJ
Translated it to VB
I think the path is wrong that I'm feeding to the installer class _servicePath, but I can't figure out a way to check the value.
Description: The process was terminated due to an unhandled exception.
Exception Info: System.IO.IOException
Public Shared Function install() As Integer
Dim dwExitCode As Integer = 2
Try
Dim servicePath As String = Reflection.Assembly.GetExecutingAssembly.Location
smtp_messenger.eventLog1.WriteEntry(servicePath, EventLogEntryType.Information, 1)
Dim pathArray() As String = {servicePath}
ManagedInstallerClass.InstallHelper(pathArray)
dwExitCode = 0
Catch ex As Exception
dwExitCode = 1
smtp_messenger.eventLog1.WriteEntry(ex.Message, EventLogEntryType.Information, 1)
End Try
Return dwExitCode
End Function
Plus I don't get the eventlog thing, Am I using this right here? The MyServer, Should I replace that with my machine name?
eventLog1 = New System.Diagnostics.EventLog()
If (Not System.Diagnostics.EventLog.SourceExists(eventSourceName, "MyServer")) Then
System.Diagnostics.EventLog.CreateEventSource(eventSourceName, logName)
End If
eventLog1.Source = eventSourceName
eventLog1.Log = logName
eventLog1.WriteEntry("Service has installed successfully", EventLogEntryType.Information, 1)
So I guess in a service, you can't display a message box. Not sure about the console line, I just need to be able to see some values so I can at least get the service installed and running.
|
|
|
|
|
It was the event log cal to CreateEventSource, I guess you have to manually create the key first and the parameters before you can use the service. And assign permissions as well.
So I rewrote it to this
Dim mySourceName As String = "smtpMessenger"
Dim myLogName As String = "Application"
Dim myServerName As String = Environment.MachineName
eventLog1 = New System.Diagnostics.EventLog()
If Not (System.Diagnostics.EventLog.SourceExists(mySourceName)) Then
Dim eventSourceData As EventSourceCreationData = New EventSourceCreationData(mySourceName, myLogName)
eventSourceData.Source = mySourceName
eventSourceData.LogName = myLogName
eventSourceData.MachineName = myServerName
System.Diagnostics.EventLog.CreateEventSource(eventSourceData)
End If
eventLog1.Source = mySourceName
eventLog1.Log = myLogName
eventLog1.MachineName = myServerName
About event ID's, I assigned an ID of 1 for creating the install, but I get this message, any help would be appreciated.
The description for Event ID 1 from source smtpMessenger cannot be found. Either the component that raises this event is not installed on your local computer or the installation is corrupted. You can install or repair the component on the local computer.
Do I have to create a description file for each ID I assign to an event?
|
|
|
|
|
1. Service can not interact with UI (messages) by default, but it can be changed. However the better way is to use some helper that reads the state/configuration of a running server and adjust it as needed...
2. I didn't understood the other parts - are you trying to create a self installing service?
I'm not questioning your powers of observation; I'm merely remarking upon the paradox of asking a masked man who he is. (V)
|
|
|
|
|
This is my first service that I'm composing.
I need some ideas on how to store and pick up stuff like database sql connector, and other stuff.
I'm thinking registry keys, so is it normal to write a windows app that stores information for the service to pickup?
I guess the windows app could also start and stop the service as well, and give the status of the service.
Just looking for some ideas here, based on your experience.
|
|
|
|
|
yes, you really only have two options
registry key(s)
config files - app.config or other file
of course, they can contain minimal info, like the connection to the database and have the rest of the config data stored as key:value pairs in a separate table
Then usually one or more helper programs - one to set up/maintain the config info (especially if all/some is encrypted), and a 'tray helper' program that displays status, allows control of the service etc
A service Im writing at the moment also has
a) an in memory database for statistics (in addition to using performance counters etc)
b) an in-built telnet & http server to inspect values (and maybe control some aspects of the service)
'g'
|
|
|
|
|
oh OK
Those are good ideas.
Guess I'll write the helper programs first, and a skeleton service for testing. And the tray, not sure how to write one but I'll figure it out.
Thanks!
|
|
|
|
|
if you wanted to cut out writing the 'boilerplate' yourself, look at something like cinchoo http://cinchoo.com/category/application-host/?orderby=ID&order=ASC[^] - my only bugbear with it is its not open source - there are other 'service frameworks' out there iirc - while writing a service from scratch once is 'useful', the real work is the service 'tasks', so using a pre-built framework allows you to focus on that
hth
|
|
|
|
|
Avoid the registry; use a config file (of your own design if you like).
If the Service(s) store status in the database, then any number of clients (Console, WinForms, Tray) can report status and allow control.
A while back I wrote a system of Windows Services that involved a main process that read its instructions from the database and ran each individual Service as instructed.
I suspect that few newbies are aware that a "service process" can run multiple "service threads" at once -- it's not a 1:1 relationship.
public static void Run(
ServiceBase[] services
)
http://msdn.microsoft.com/en-us/library/6esb073b(v=vs.110).aspx[^]
In this way, I could have the process on server "CAT" run Services "Scratch" and "Purr", while the process on server "DOG" could run Services "Wag" and "Bark" and moving Services from one server to another was simple. All servers had exactly the same code deployed.
|
|
|
|
|
Could you expand the thought on the config file.
Like an ini file stored in App Data of windows?
Best location for a config,
I understand being able to just copy the files over to another server in which I approve of, and quickly install the service and be up and running.
|
|
|
|
|
jkirkerx wrote: Like an ini file
I use XML.
jkirkerx wrote: App Data
That's user-specific. I have used the directory where the application is deployed. And more recently I've been using the C:\ProgramData directory.
|
|
|
|
|
|
jkirkerx wrote: I need some ideas on how to store and pick up stuff like database sql connector, and other stuff.
.Net applications have a "app.config" file which can be added to the application and where one can retrieve and store information.
http://msdn.microsoft.com/en-us/library/ms184658.aspx[^]
Be careful with that file because if you make it ill formed the application will not load and figuring out that problem is difficult.
jkirkerx wrote: I guess the windows app could also start and stop the service as well
A windows service is a windows service, so I am not exactly sure what you mean.
It is possible to structure the build such that one can have a command line executable and a windows service but you probably don't want to try that for your first service.
You might want to also looking into a logging API. Helps in figuring out window service errors.
|
|
|
|
|
Well it dawned on me that I already have a configuration file in the web application that I can adsorb for the database connector string and website name. So I can put the service in the web application. Took me awhile to figure that out.
Perhaps the web application can start the web service, and the service will wait for the date and time to start doing its thing via timer.
So on to my first Windows Service. It's new to me and very frustrating. I just got the base code to work, the framework, so now it
Self Installs
Self Uninstalls
Creates an Event Log
Writes to the Event Log
Connects to the service controller
net start
net stop
net pause
Writes the event log registry entry, and message id file to connect to.
WOW, that was a mind bender. There's help out there, but it's so generic.
Now I know why many said write a console app.
Well now I can go on to writing the job code, and then figure out how to write an id system dll for the event log id's and messages, and register that file.
So I'm going to try reading my config file in the web app first, and see if I can read it, if so I'm on my way to more frustration.
|
|
|
|
|
I am trying to select menu Items if based on url. below is my code and its not working, Please help
Dim strFilePath As String = Me.Context.Request.FilePath
If (strFilePath.Contains(strFilePath.IndexOf("/Groups.aspx").ToString)) = True Then
Menu2.Items(0).Selected = True
ElseIf (strFilePath.Contains(strFilePath.IndexOf("/Reports.aspx").ToString)) = True Then
Menu2.Items(2).Selected = True
Menu2.Items(0).Selected = False
Else : Menu2.Items(0).Selected = False
End If
|
|
|
|
|